sql - SQL server - 将字符串转换为日期时间
问题描述
我需要将包含格式的日期和时间的列转换08-JAN-19 09.35.58.173000000 AM
为datetime
. 我在下面包含了我尝试过的代码 - 注释掉的代码当前不起作用。
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
解决方案
您的数据的唯一问题是您需要日期的时间部分看起来像这样: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。如果毫秒是一个问题,那么将需要更多的麻烦。
推荐阅读
- python - 熊猫拆分列表列
- excel - 这个 VBA 语句可以写成一行吗?
- eiffel - 埃菲尔:比较类型的最佳方法,而不用发出嘘声
- go-cd - 我可以在 gocd-server 页面上检查代理的健康状况吗?
- java - 如何在加载类的字节码之前对其进行操作?
- python-3.x - 使用 Selenium 定位具有变化数字的动态 li 元素
- c# - 方法'mysql_native_password'失败并显示消息:用户''@'RAHUL-PC'的访问被拒绝(使用密码:是)
- heroku - Heroku 在尝试构建应用程序时似乎保留了某种缓存
- javascript - 设置状态不适用于反应组件中的多个 api 获取
- java - 我需要帮助在 Java 平台游戏中创建碰撞系统