我想将一些“日期”转换为实际日期。这似乎在一天少于13日的地方起作用。它似乎将十三号定为一个月。
SELECT [User ID],
try_CAST([First Seen (BST)] as datetime) as [New First Seen Date]
[First Seen (BST)],
[Signed up (BST)]
FROM [dbo].[fix]
当我希望将它们转换为相同格式/类型时显示为NULL。
New First Seen Date First Seen Date
2018-11-08 23:38:00.000 11/08/2018 23:38
NULL 20/08/2018 22:07
NULL 26/08/2018 22:41
2018-09-09 20:55:00.000 09/09/2018 20:55
2018-09-09 23:24:00.000 09/09/2018 23:24
非常感谢
答案 0 :(得分:2)
由于日期字符串为DD / MM / YYYY,因此可以使用样式103。
select NewDate = TRY_CONVERT(datetime, s.FirstSeenDate, 103)
, s.FirstSeenDate
from
(values
('11/08/2018 23:38')
, ('20/08/2018 22:07')
, ('26/08/2018 22:41')
, ('09/09/2018 20:55')
, ('09/09/2018 23:24')
)s(FirstSeenDate)
答案 1 :(得分:0)
一种相对简单的方法是将值分为两部分,一部分用于日期,另一部分用于时间部分:
select try_convert(datetime, left(str, 10), 104) + try_convert(datetime, right(str, 5))
from (values ('26/08/2018 22:41')) v(str);
答案 2 :(得分:0)
我认为指定转换日期格式较为安全-查看TRY_CONVERT (Transact-SQL)
,您可以在其中设置格式(请参见此处的其他格式-CAST and CONVERT (Transact-SQL)
。我想目前您的日期被视为mm/dd/yyyy
而非dd/mm/yyyy
,因此您可以使用格式103对其进行收敛。
select
try_convert(datetime, [First Seen Date], 103) as res
from ...
res
-------------------
11/08/2018 23:38:00
20/08/2018 22:07:00
26/08/2018 22:41:00
09/09/2018 20:55:00
09/09/2018 23:24:00