Преобразовать фиксированное число MSSS в ANSI Time "чч: мм: сс AM / PM" - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь преобразовать фиксированное число во время без даты, как 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 минут

1 Ответ

1 голос
/ 06 мая 2019
with TEST_DATA
  as (
    select 67683000::integer as AS_AIRED_START_TIME -- PM
    union all
    select 24483000::integer -- AM
)
select to_char(timeadd(ms, AS_AIRED_START_TIME, to_time('00:00:00')), 'HH12:MI:SS AM')
from TEST_DATA;
...