我的表中有event_datetime
字段,数据类型为nvarchar
(例如:2017-04-25-12.09.14.36.089600
)
我需要将它转换为日期时间
任何人都可以建议怎么做?
答案 0 :(得分:1)
尝试像这样的东西,如果这有帮助,但我不确定你是否仍然想要它的Microsecond部分:
选择CONVERT(datetime2,REPLACE(REPLACE(STUFF(' 2017-04-25-12.09.14.36',11,1,''),' - '''),''':'))
答案 1 :(得分:0)
这是一种方法:
DECLARE @S varchar(100) = ' 2017-04-25-12.09.14.36.089600 '
SELECT CAST(
REPLACE(
STUFF(
LEFT(LTRIM(@S), 19)
, 11, 1, 'T')
, '.', ':')
as datetime) As ProperDataType -- just a hint :-)
结果:
ProperDataType
25.04.2017 12:09:14
请注意,我未在此处测试有效性 - 格式不同或数字无效的任何内容都会引发错误 - 因此,如果您有这样的值 - 2017-14-25-12.09.14.36.089600
,则会引发错误
要做得好,首先需要确定可转换为日期的记录 - 为此,最简单的方法是使用cte和isdate()
:
;WITH CTE AS
(
SELECT REPLACE(
STUFF(
LEFT(LTRIM(event_datetime), 19)
, 11, 1, 'T')
, '.', ':') As ProperlyFormatted
FROM YourTableName
)
SELECT CAST(ProperlyFormatted as datetime) As event_datetime
FROM CTE
WHERE ISDATE(ProperlyFormatted) = 1
请注意,我使用的是ISO8601日期格式,因此无论服务器本地设置如何,您都应始终获得正确的结果。