【问题标题】:Is there a way of using CAST (or CONVERT) in SQL to turn a character string into a time object?有没有办法在 SQL 中使用 CAST(或 CONVERT)将字符串转换为时间对象?
【发布时间】:2012-01-10 00:15:12
【问题描述】:

我的数据库中有一个包含 16 字节字符数组的字段,并且我在数组的前两个字节中插入了 2 个无符号字符。现在这 2 个无符号字节保存时间值,一个字节用于小时值,另一个字节用于分钟值。在数据库中查看这些值时,我得到了奇怪的符号,因为数据库认为它处理的是一个 16 字节的 char 数组,所以我想知道我需要做什么才能查看由数组的前 2 个字节表示的时间值? 我已经尝试了以下没有占上风。

SELECT TOP 1000 [reference]
      ,CAST(extra1 as time)
FROM [DB NAME].[DB TABLE]

extra1 是数据库中列的名称,它保存 16 字节的 char 数组值,您可以在这里看到我正在尝试将其转换为时间对象,但单击执行后失败。

任何帮助将不胜感激,尽管请不要问我为什么将 2 个无符号字节放入 16 字节 char 数组中,这说来话长 ;-)

【问题讨论】:

    标签: sql sql-server-2008 casting


    【解决方案1】:

    不是很优雅,但应该可以工作:

    SELECT TOP 1000 [reference]
        ,CAST(
            (cast(ascii(substring(extra1 ,1,1)) as varchar) + ':' + CAST(ascii(substring(extra1 ,2,1)) as varchar)
            as time)
    FROM [DB NAME].[DB TABLE]
    

    【讨论】:

    • 如果你必须多次使用它,我建议创建一个 SQL 函数以从 varchar 返回一个 time,以避免这种丑陋无处不在
    • 非常感谢您的帮助 w0lf,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多