Конвертировать военное время в стандартное время - PullRequest
0 голосов
/ 06 июля 2018

У меня есть набор данных, который отодвигает время посещения в формате час / мин (например, 12:33 - 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

Я пытаюсь просто получить часть времени.

1 Ответ

0 голосов
/ 06 июля 2018

Делая это через серию приведений, вы можете сделать что-то вроде:

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 типа.

...