将nvarchar转换为日期时间

时间:2017-04-25 06:50:46

标签: sql sql-server sql-server-2008-r2

我的表中有event_datetime字段,数据类型为nvarchar
(例如:2017-04-25-12.09.14.36.089600) 我需要将它转换为日期时间 任何人都可以建议怎么做?

2 个答案:

答案 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

(live demo on rextester)

请注意,我未在此处测试有效性 - 格式不同或数字无效的任何内容都会引发错误 - 因此,如果您有这样的值 - 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日期格式,因此无论服务器本地设置如何,您都应始终获得正确的结果。