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

Pal*_*ngh -3 sql t-sql sql-server datetime sql-server-2019

我需要在 SQL Server 2019 中将“13/10/2021 09:38:20 PM”转换为“2021/10/13 21:38:20”。我在互联网上查找了相同的内容,但找不到一个办法。请帮我。

Aar*_*and 6

为什么你要从一个糟糕的区域格式开始?为什么你关心SQL Server提供什么格式?让 SQL Server 解释不明确的区域格式并提供正确的日期时间数据类型(或者,更好的是,修复源,使其一开始就不会提供不明确的格式)。如果您想将其呈现为类似的内容,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);
Run Code Online (Sandbox Code Playgroud)

输出:

健全输出 错误输出
2021-10-13 21:38:20.000 2021/10/13 21:38:20

这很复杂,因为您想要的格式本身不可用(好吧,除非您使用我确信有人会推荐的极其昂贵的FORMAT()函数)。有关负责任约会的更多信息请参见此处。