You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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函数,所以我们用CONVERTREPLACE函数来搞定。

具体实现方案

假设你的输入是字符串类型的日期(比如'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

火山引擎 最新活动