【发布时间】:2019-05-01 23:38:40
【问题描述】:
我正在尝试将固定数字转换为没有日期的时间,如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
作为播出时间`
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/60sec/60min/24hours = 00:30:00 = 30 分钟
【问题讨论】:
标签: sql date time ansi snowflake-cloud-data-platform