【问题标题】:SQL- Convert varchar(8) to time formatSQL- 将 varchar(8) 转换为时间格式
【发布时间】:2016-02-06 17:17:42
【问题描述】:

时间保存为 varchar(8) 格式,例如:09241324,我想将其转换为时间格式。我可以摆脱最后一个nn,这样hh:mm:ss 就可以了。我尝试使用 cast/convert 但它抛出错误:

从字符转换日期和/或时间时转换失败 字符串。

谁能帮帮我?

【问题讨论】:

  • 什么是 RDBMS?时间/日期函数因实现而异。
  • 是sql server 2008 R2
  • 如果可能,您应该更改表的数据类型并将时间信息存储在时间数据类型中。以字符形式存储这些东西是一场噩梦。

标签: sql sql-server sql-server-2008-r2 type-conversion time-format


【解决方案1】:

这行得通吗?

convert(time, stuff(stuff(stuff(dt, 3, 0, ':'), 6, 0, ':'), 9, 0, '.'))

cast 通常比convert 更受青睐,但我不知道您是否需要指定格式代码。

无毫秒类似:

convert(time, stuff(stuff(stuff(dt, 3, 0, ':'), 6, 0, ':'), 9, 2, '.00'))

【讨论】:

  • 你的东西比我的 SUBSTRING 干净得多
  • 不过我总是要在stuff 上查找参数:)
  • 谢谢!它有效,但我只想要前 6 位数字,例如 hh:mm:ss 而不是纳秒。无论如何要删除那些?
  • @GeetanjaliSachdeva 使用 time(0) 仅存储 hh:mm:ss 而不是 time
【解决方案2】:

插入时间格式片段(冒号 : 和小数点 . ),CAST as TIME:

DECLARE @string VARCHAR(10)
SET @string = '09241324'
SELECT CAST(
    SUBSTRING(@string,1,2) + ':' +
    SUBSTRING(@string,3,2) + ':' +
    SUBSTRING(@string,5,2) + '.' +
    SUBSTRING(@string,7,2) AS TIME)

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多