【问题标题】:SQL - substring query resultSQL - 子串查询结果
【发布时间】:2016-09-07 14:06:43
【问题描述】:

我有以下列的表格

  log_id      INT PRIMARY KEY 
  emp_name    VARCHAR(7) NOT NULL
  date_log    VARCHAR(23) NOT NULL
  in_am       VARCHAR(8) NULL
  out_am      VARCHAR(4) NULL
  total_am    VARCHAR(4) NULL
  in_pm       VARCHAR(4) NULL
  out_pm      VARCHAR(8) NULL
  total_pm    VARCHAR(4) NULL
  grand_total VARCHAR(4) NULL
  id          INT  Foreign key here

假设我已经得到了 in_am 和 out_am 的值,我想得到它之间的差异,我这样做了。

 select cast(out_am as datetime) - cast(in_am as datetime) from Table

结果是这样的:

1900-01-01 00:00:07.000

但我想要这个结果

00:00:07

我尝试这样子串:

select substring((cast(out_am as datetime) - cast(in_am as datetime)),15,20) from table

但它不起作用。

【问题讨论】:

标签: sql sql-server datetime


【解决方案1】:

只需使用 108 的 DATETIME 格式输出 HH:MM:SS 如下:

SELECT CONVERT(VARCHAR(8), (CAST(out_am AS DATETIME) - CAST(in_am AS DATETIME)), 108) FROM Table

【讨论】:

    【解决方案2】:

    你可以尝试使用 convert(time,getdate())

    【讨论】:

      【解决方案3】:

      如果您知道这些值总是小于一天,您可以将差值投射到time

      select cast(cast(out_am as datetime) - cast(in_am as datetime) as time)
      from Table;
      

      或者,您可以转换为字符串并提取时间分量:

      select right(convert(varchar(255), cast(out_am as datetime) - cast(in_am as datetime) ), 8)
      

      【讨论】:

        【解决方案4】:

        您可以使用CASTFORMAT

        SELECT FORMAT(CAST(CAST(out_am AS DATETIME) - CAST(in_am AS DATETIME) AS TIME), N'hh\:mm\:ss')
        FROM TABLE
        

        【讨论】:

          猜你喜欢
          • 2020-05-04
          • 1970-01-01
          • 2012-11-22
          • 1970-01-01
          • 1970-01-01
          • 2015-02-07
          • 2015-02-27
          • 1970-01-01
          • 2023-03-10
          相关资源
          最近更新 更多