如何在SQL Server 2008中将DD-MM-YYYY HH:MM:SS转换为DD-MMM-YYYY HH:MM:SS
在SQL Server 2008中转换日期格式:DD-MM-YYYY HH:MM:SS → DD-MMM-YYYY HH:MM:SS
要实现这个转换,得分两步走:先把输入的日期字符串转换成SQL Server的datetime类型,再把它格式化成你需要的样式。因为SQL Server 2008还不支持2012及以后版本的FORMAT函数,所以我们用CONVERT和REPLACE函数来搞定。
具体实现方案
假设你的输入是字符串类型的日期(比如'11-10-2017 11:23:30'),可以用下面的SQL语句:
-- 定义输入变量 DECLARE @input_date VARCHAR(20) = '11-10-2017 11:23:30' -- 执行转换 SELECT REPLACE(CONVERT(VARCHAR(11), CONVERT(DATETIME, @input_date, 105), 106), ' ', '-') + ' ' + CONVERT(VARCHAR(8), CONVERT(DATETIME, @input_date, 105), 108) AS converted_date
如果你的输入本身就是datetime类型,那可以简化一下:
DECLARE @input_date DATETIME = '2017-10-11 11:23:30' SELECT REPLACE(CONVERT(VARCHAR(11), @input_date, 106), ' ', '-') + ' ' + CONVERT(VARCHAR(8), @input_date, 108) AS converted_date
代码解释
- 第一步:字符串转datetime
CONVERT(DATETIME, @input_date, 105)这里用样式码105对应DD-MM-YYYY格式,确保输入的字符串能正确转换成日期类型,避免格式识别错误。 - 第二步:格式化日期部分
CONVERT(VARCHAR(11), ..., 106)会把日期转成DD MMM YYYY的样式(比如11 Oct 2017),再用REPLACE把空格替换成-,就得到11-Oct-2017。 - 第三步:提取时间部分
CONVERT(VARCHAR(8), ..., 108)用样式码108提取24小时制的HH:MM:SS时间部分。 - 最后拼接
把处理后的日期和时间部分用空格拼接,就得到你要的11-Oct-2017 11:23:30。
注意事项
如果你的SQL Server服务器默认语言不是英语,月份缩写可能会变成其他语言的(比如法语的oct.),这时候可以在执行转换前先设置语言为英语:
SET LANGUAGE English; -- 后面再执行转换语句
这样就能保证月份缩写是英语的标准缩写啦。
内容的提问来源于stack exchange,提问作者Md Kamran Azam




