首页 > 解决方案 > SQL server - 将字符串转换为日期时间

问题描述

我需要将包含格式的日期和时间的列转换08-JAN-19 09.35.58.173000000 AMdatetime. 我在下面包含了我尝试过的代码 - 注释掉的代码当前不起作用。

SELECT [last_updated_at]
    , SUBSTRING([last_updated_at], 1, 9)
    , convert(datetime, SUBSTRING([last_updated_at], 1, 9), 103) as Date
    , SUBSTRING([last_updated_at], 11, 18)
    --, convert(datetime, SUBSTRING([last_updated_at], 11, 18), 103) as Time --This fails
    --, convert(datetime, SUBSTRING([last_updated_at], 1, 9), 103) + convert(datetime, SUBSTRING([last_updated_at], 11, 18), 103) as DateTime --final output datetime column
FROM #temp_dates

标签: sqlsql-server

解决方案


您的数据的唯一问题是您需要日期的时间部分看起来像这样:2019-01-08 09:35:58.173而不是2019-01-08 09.35.58.173(小时和分钟后的点需要是冒号而不是点。

--==== Original formatting
DECLARE @date VARCHAR(20) = '08-JAN-19 09.35.58.173000000'

--==== Solution
SELECT CAST(STUFF(STUFF(@date,13,1,':'),16,1,':') AS DATETIME);

请注意,这会截断(而不是四舍五入)到最接近的毫秒,因此 09:35:58.173 变为 09:35:58.100。如果毫秒是一个问题,那么将需要更多的麻烦。


推荐阅读