【发布时间】:2020-03-21 17:57:51
【问题描述】:
此查询按预期工作
SELECT CAST('8:40 AM' AS TIME) Times
UNION
SELECT CAST('12:01 PM' AS TIME)
UNION
SELECT CAST('12:04 PM' AS TIME)
UNION
SELECT CAST('12:41 PM' AS TIME)
UNION
SELECT CAST('12:45 PM' AS TIME)
UNION
SELECT CAST('1:28 PM' AS TIME)
UNION
SELECT CAST('1:43 PM' AS TIME)
以上选择查询的输出
Times
----------------
08:40:00.0000000
12:01:00.0000000
12:04:00.0000000
12:41:00.0000000
12:45:00.0000000
13:28:00.0000000
13:43:00.0000000
此查询也按预期工作
DECLARE @timeString VARCHAR(MAX) =
'
8:40 AM ,
12:01 PM,
12:04 PM,
12:41 PM,
12:45 PM,
1:28 PM ,
1:43 PM,,
'
;WITH CTE AS
(
SELECT TIMELIST.a.value('.','VARCHAR(MAX)') Times FROM(SELECT CAST('<P>'+REPLACE(@timeString,',','</P><P>')+'</P>' AS XML) AS TIMESPLIT) AS T CROSS APPLY T.TIMESPLIT.nodes('/P') AS TIMELIST(a)
)
SELECT LTRIM(RTRIM(Times)) Times FROM CTE WHERE Times != ''
以上选择查询的输出
Times
------------
8:40 AM
12:01 PM
12:04 PM
12:41 PM
12:45 PM
1:28 PM
1:43 PM
此查询未按预期工作
;WITH CTE AS
(
SELECT TIMELIST.a.value('.','VARCHAR(MAX)') Times FROM(SELECT CAST('<P>'+REPLACE(@timeString,',','</P><P>')+'</P>' AS XML) AS TIMESPLIT) AS T CROSS APPLY T.TIMESPLIT.nodes('/P') AS TIMELIST(a)
)
SELECT CAST(LTRIM(RTRIM(Times)) AS TIME) Times FROM CTE WHERE Times != ''
以上查询返回错误。
Msg 241, Level 16, State 1, Line 83 转换时转换失败 字符串中的日期和/或时间。
【问题讨论】:
-
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 版权所有 (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1
(内部版本 7601:Service Pack 1)(管理程序) -
哦...坚持使用 CAST AS XML hack!
标签: sql-server tsql time sql-server-2008-r2