Snowflake - 将时间戳转换为日期序列号

3

我有一个包含以下格式时间戳的SQL表:

2022-02-07 12:57:45.000

在SQL Server中,您可以将其转换为浮点日期序列号(自1900年01月01日以来的天数):

select convert(float, my_timestamp_field) as float_serial_number

这将产生以下输出:

float_serial_number
44597.5401041667

我正在尝试在Snowflake中获得相同的输出,但无法弄清如何返回一个浮点数。这是我最接近的代码:

select 
datediff(day, '1900-01-01', '2022-02-07 12:57:45.000') as integer_only,
timestampdiff(day, '1900-01-01', '2022-02-07 12:57:45.000') as same_as_above

下面是输出结果:

integer_only same_as_above
44,597 44,597

在Snowflake中需要的输出(此处考虑了12pm = 0.5的情况):

desired_Snowflake_output
44597.5401041667
2个回答

4

您可以使用以下任一方式(秒、毫秒、纳秒)在datediff中计算十进制差异,并将其除以适当的分母。

set mydate='2022-02-07 12:57:45.000'::timestamp;

select datediff(seconds, '1900-01-01', $mydate)::float/86400

1
这里有一个可以完成任务的SQL函数。
create or replace function dayfloat_ts(ts TIMESTAMP)
returns float
language sql
as
$$
    (datediff(day, '1900-01-01', TS)::float +
    (datediff(nanoseconds, '1900-01-01', TS)::float -
    datediff(nanoseconds, '1900-01-01', date_trunc(day, TS)))::float / 86400000000000::float)
$$;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接