Я пытаюсь преобразовать фиксированное число во время без даты, как hh:mm:ss AM/PM
- поэтому 67683000
будет 06:48:03 PM
; 22814000
= 06:20:14 AM
. У меня было % 43200000
, чтобы вычислить как остаток. Мой код MSSS SQL (курсор) находится ниже. В Snowflake мой код (не как курсор) должен быть переведен в ANSI, но я получаю ошибки и не могу понять, почему.
Ожидаемые результаты в HH:MM:SS AM (or PM)
MSSS - correct
`CONVERT(VARCHAR, DATEADD(ms, AS_AIRED_START_TIME % 43200000, 0), 108)
+ '' ''
+ CASE WHEN AS_AIRED_START_TIME % 86400000 > 43199999
THEN ''PM''
ELSE ''AM'' END
[Время выхода в эфир] `
ANSI - wrong
`TO_VARCHAR(255), (DATE_PART(MILLISECOND, AS_AIRED_START_TIME % 43200000, 0), 108)
+ ' '
+ CASE WHEN AS_AIRED_START_TIME % 86400000 > 43199999
THEN 'PM'
ELSE 'AM' END
as AiredTime`
ANSI - close but not exact
`TO_CHAR(TRUNC(fed.AS_AIRED_START_TIME/3600),'FM9999999999900')
|| ':'
|| TO_CHAR(TRUNC(MOD(fed.AS_AIRED_START_TIME,3600)/60),'FM00')
|| ':'
|| TO_CHAR(MOD(fed.AS_AIRED_START_TIME,60),'FM00')`
Result: 17248:36:40
ANSI - wrong
`TO_TIMESTAMP_NTZ(fed.AS_AIRED_START_TIME,0)`
ANSI - wrong
`TO_VARCHAR(DATEADD(millisecond,500, current_timestamp),'hh:mi:ss')`
Excel - conversion
введите описание изображения здесь
поэтому, учитывая 1800000, я бы рассчитал как 1800000/1000 / 60сек / 60мин / 24часа = 00:30:00 = 30 минут