将 dd/mm/yyyy hh:mm:ss am/pm 转换为 yyyy/mm/dd hh:mm:ss

Convert dd/mm/yyyy hh:mm:ss am/pm to yyyy/mm/dd hh:mm:ss

我需要在 SQL Server 2019 中将“13/10/2021 09:38:20 PM”转换为“2021/10/13 21:38:20”。我在网上查过同样,但我找不到解决方案。请帮助我。

为什么您从糟糕的区域格式开始?你为什么关心SQL服务器提供什么格式?让 SQL 服务器解释模棱两可的区域格式并提供正确的日期时间数据类型(或者,更好的是,修复源以便它首先不提供模棱两可的格式)。如果您想将其呈现为 yyyy/mm/dd 24:nn:ss 之类的内容,请让表示层执行此操作。

也就是说,您可以按如下方式执行此操作:

DECLARE @BadDateString varchar(32) = '13/10/2021 09:38:20 PM',
        @SaneOutput    datetime;

SET @SaneOutput = CONVERT(datetime, @BadDateString, 103);

SELECT SaneOutput = @SaneOutput,
       BadOutput  = CONVERT(char(11), @SaneOutput, 111)
                  + CONVERT(char(8),  @SaneOutput, 108);

输出:

SaneOutput BadOutput
2021-10-13 21:38:20.000 2021/10/13 21:38:20

This is complex because the format you want isn't available natively (well, unless you use the extremely expensive FORMAT() function that I'm sure someone will recommend). Lots more about Dating Responsibly here.

由于您必须从一种格式转换为另一种格式,因此首先您必须转换为日期时间数据类型,然后应用自定义格式,如下所示:

DECLARE @datestring VARCHAR(50) = '13/10/2021 09:38:20 PM'
SELECT FORMAT(CONVERT(DATETIME,@datestring,103),'yyyy/MM/dd HH:mm:ss')

2021/10/13 21:38:20

参考文献:

注意事项:使用“FORMAT”非常昂贵。因此,做出相应的决定。 FORMAT is expensive