在sql server 2016中将特定的12小时格式类型转换为24小时格式类型的查询

在sql server 2016中将特定的12小时格式类型转换为24小时格式类型的查询,sql,sql-server-2012,date-formatting,sql-server-2016-express,Sql,Sql Server 2012,Date Formatting,Sql Server 2016 Express,我们有一个例子,用户编辑的时间格式为3/2/20 3:30P(其中p表示p.m.),我试图将其转换为24小时格式,以便能够使用标准列的连接条件,例如2020-03-02 15:30:0000 e、 g.3/2/20 3:30Pto2020-03-02 15:30:0000 在StackOverflow中的一个答案中尝试了以下方法,但无效: SELECT CONVERT(DATETIME, '10/1/2013 6:39:04 PM', 0) -- Concatenate in requir

我们有一个例子,用户编辑的时间格式为
3/2/20 3:30P
(其中p表示p.m.),我试图将其转换为24小时格式,以便能够使用标准列的连接条件,例如
2020-03-02 15:30:0000

e、 g.
3/2/20 3:30P
to
2020-03-02 15:30:0000

在StackOverflow中的一个答案中尝试了以下方法,但无效:

SELECT CONVERT(DATETIME, '10/1/2013 6:39:04  PM', 0)  
-- Concatenate in required format
SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, '10/1/2013 6:39:04  PM', 0), 101) 
+ ' '+ CONVERT(VARCHAR(5),CONVERT(DATETIME, '10/1/2013 6:39:04  PM', 0), 108) 
你可以做:

DECLARE @dates VARCHAR(255) = '3/2/20 3:30P'

SELECT @dates AS Old_Date, 
       CONVERT(DATETIME, @dates + RIGHT(RIGHT(@dates, 1) + 'm', 1)) AS New_Date

假设格式为
M/d/yy h:mmA(或p)
,那么我将使用样式代码
22
,它用于
mm/dd/yy hh:mi:ss AM(或PM)
,这样无论语言设置如何,它都可以工作:

SELECT CONVERT(datetime2(0),V.YourDate + 'M',22)
FROM (VALUES('3/2/20 3:30P'))V(YourDate);

您的数据实际上是什么格式的?在你的问题文本中,你说它是
M/d/yyy h:mm{P/A}
,但在SQL示例中(我假设)你是
M/d/yyyy h:mm:ss{PM/AM}
。是哪一个?这是两种完全不同的格式。选择Cast('3/2/20 3:30P'+'M'作为日期时间)就可以了。您可以使用默认样式0对convert执行相同的操作。@CetinBasoz-您也说得对,它工作正常。