首页 > 解决方案 > 将军用时间转换为标准时间误差

问题描述

我有一个数据集以小时/分钟格式回溯访问时间(例如 - 12:33 PM 将是 1233)。我正在尝试使用该DATEPART函数,但它一直给我一个语法错误,指出:

“期待 '(' 和 'HOUR' 关键字之间的东西。

下面的部分是给我错误的 SQL 片段:

CASE WHEN DATEPART(HOUR , VSL.VISIT_TIME) > 12  THEN DATEPART (HOUR, VSL.VISIT_TIME) -12 ELSE DATEPART (HOUR, VSL.VISIT_TIME) END AS THE_TIME

我试图只得到时间的一部分。

标签: sqlteradatadatepart

解决方案


通过一系列演员来执行此操作,您可以执行以下操作:

SELECT CAST(CAST(CAST(CAST((1420 * 100 (FORMAT '99:99:99')) AS CHAR(8)) AS time ) AS TIME FORMAT 'HH:MIBT') AS CHAR(8))

或者您可以使用一些数学来对其进行排序并在最后进行转换:

SELECT 
  1420 AS intTime,
  FLOOR(intTime/100) AS intHours,
  intTime - (intHours * 100) AS intMinutes,
  intHours * 60 + intMinutes AS totalIntMinutes,
  TIME '00:00:00' + (totalIntMinutes * INTERVAL '1' MINUTE) AS totalTime,
  CAST(CAST(totalTime AS TIME FORMAT 'HH:MIBT') AS CHAR(8)) AS char12HrTime

或者只是解析和数学:

SELECT 
  1420 AS intTime,
  Trim(CASE WHEN FLOOR(intTime/100) > 12 then FLOOR(intTime/100) - 12 ELSE FLOOR(intTime/100) END) || ':' || TRIM(intTime - (FLOOR(intTime/100) * 100))

可能还有其他一些方法可以减少这种情况,也许更优雅一点。

无论哪种方式,这都会有点难看,因为您将时间存储为一种time类型以外的东西。


推荐阅读