【问题标题】:Format short int to time in SQL Server在 SQL Server 中将短整型格式化为时间
【发布时间】:2014-06-09 18:32:59
【问题描述】:

我有一个时间列显示为int800 将是 08:00am1300 将是 1:00pm

如何格式化 int 使其显示为 12 小时时间,例如1:13 pm?

我正在使用 SQL Server。

谢谢

【问题讨论】:

  • 您希望输出到底如何?通常我会将列转换为时间 - 它不像 sql server 没有时间数据类型。或者做文本操作客户端。
  • 您使用的是哪个版本?
  • 9.00.4035.00 SP3 标准版

标签: sql-server sql-server-2005


【解决方案1】:

您可以执行以下操作来获得所需的结果。想法取自How to convert an integer (time) to HH:MM:SS::00 in SQL Server 2008?

set @time = 1300

select (@time / 1000000) % 100 + ':' +
       (@time / 10000) % 100  + ':' +
       (@time / 100) % 100  + ':' +
       (@time % 100) * 10 

【讨论】:

    【解决方案2】:

    将整数转换为hh:mm:ss representation of datetime 并在表示层处理格式(即AM/PM):

    DECLARE @Time INTEGER = 800;
    SELECT
    -- convert datetime to hh:mm:ss
    CONVERT(VARCHAR,
            -- cast hh:mm to datetime
            CAST(-- insert semicolon to get hh:mm format
                 STUFF(-- convert integer to string and pad with zeroes
                       RIGHT(REPLICATE('0', 4) + CAST(@Time AS VARCHAR), 4),
                       3, 0, ':')
            AS DATETIME),
            108);
    
    SELECT @Time = 1300;
    SELECT CONVERT(VARCHAR, CAST(STUFF(RIGHT(REPLICATE('0', 4) + CAST(@Time AS VARCHAR), 4), 3, 0, ':') AS DATETIME), 108);
    

    从临时表中选择的示例:

    CREATE TABLE #Time ( TimeValue INTEGER );
    INSERT INTO #Time VALUES (800);
    INSERT INTO #Time VALUES (1300);
    
    SELECT CONVERT(VARCHAR,
                   CAST(STUFF(RIGHT(REPLICATE('0', 4) + CAST(TimeValue AS VARCHAR), 4),
                              3, 0, ':')
                        AS DATETIME), 108) AS Time
    FROM #Time;
    DROP TABLE #Time;
    

    【讨论】:

    • 我不知道我的列值在这个等式中的作用。你能解释得更深入一点吗?
    • @marc_s 当谈到TIME...更新时,我总是混淆 2005 年和 2008 年。
    • @Frantumn 您的列名将替换上述代码中的@Time 变量。更新了从临时表中选择的示例。
    猜你喜欢
    • 2019-02-16
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2016-07-03
    相关资源
    最近更新 更多