在SQL Server(含2008)中如何转换YYYY-MM-DD HH:MM:SS日期格式?
嘿,这两个日期格式转换的需求很常见,我来给你详细讲下解决方案:
问题1:将YYYY-MM-DD HH:MM:SS格式的日期时间转换为MM-DD-YYYY HH:MM:SS格式
首先得明确:SQL Server里的DateTime/DateTime2类型本身是没有存储格式的,我们看到的各种日期格式只是显示层面的转换结果。所以要得到目标格式,需要用转换函数把日期类型转成字符串。
这里有两种常用方法:
方法一:使用
CONVERT函数(兼容所有SQL Server版本)CONVERT是SQL Server的经典转换函数,通过指定样式参数来控制输出格式。我们可以拆分日期和时间部分分别转换,再拼接起来:-- 示例:转换当前时间 SELECT CONVERT(VARCHAR(20), GETDATE(), 120) AS Original_Format, -- 输出YYYY-MM-DD HH:MM:SS REPLACE(CONVERT(VARCHAR(10), GETDATE(), 101), '/', '-') + ' ' + CONVERT(VARCHAR(8), GETDATE(), 108) AS Target_Format;解释:
- 样式
101会输出MM/DD/YYYY,用REPLACE把斜杠替换成横杠就得到MM-DD-YYYY - 样式
108会输出24小时制的HH:mm:ss时间部分 - 把两部分用空格拼接,就得到目标格式
- 样式
方法二:使用
FORMAT函数(SQL Server 2012及以上版本可用)
如果你用的是2012或更高版本,FORMAT函数更灵活,直接用自定义格式字符串就能搞定:SELECT FORMAT(GETDATE(), 'MM-dd-yyyy HH:mm:ss') AS Target_Format;这个函数的格式字符串非常直观,完全按照你想要的格式写就行。
问题2:SQL Server 2008中将24小时制yyyy-mm-dd hh:mm:ss(DateTime类型)转换为dd-mm-yyyy hh:mm:ss格式
SQL Server 2008没有FORMAT函数,所以只能用CONVERT配合字符串替换来实现。针对你给出的示例输入2017-12-18 18:16:49,可以这样写:
DECLARE @InputDate DATETIME = '2017-12-18 18:16:49'; SELECT @InputDate AS Original_Date, REPLACE(CONVERT(VARCHAR(10), @InputDate, 105), '/', '-') + ' ' + CONVERT(VARCHAR(8), @InputDate, 108) AS Target_Format;
执行后会输出:18-12-2017 18:16:49,完全符合你的期望。
解释:
- 样式
105会输出dd/mm/yyyy,用REPLACE把斜杠换成横杠得到dd-mm-yyyy - 样式
108依然输出24小时制的HH:mm:ss时间部分 - 拼接两部分就得到最终的目标格式
内容的提问来源于stack exchange,提问作者Md Kamran Azam




