转换错误:无法将时间戳(MS)转换为时间戳(美国)

问题描述 投票:0回答:1

我正在尝试将脚本从 SQLite 转换为 DuckDB,但似乎无法绕过这些时间戳和日期时间格式...

例如,在 SQLite 中,以下代码可以运行:

datetime((lastLogon / 10000000) - 11644473600, 'unixepoch') AS lastLogon

在 DuckDB 中,我无法让自己找到合适的函数...

SELECT epoch_ms(133782998237203223);

导致错误

错误:转换错误:无法将时间戳(MS)转换为时间戳(美国)

SQL状态:空

错误代码:0

我尝试了不同的功能,比如

SELECT to_timestamp(133782998237203223)::TIMESTAMPTZ AT TIME ZONE 'UTC'

但仍然错误

错误:转换错误:无法将纪元秒转换为带有时区的时间戳

duckdb
1个回答
0
投票

epoch_ms
函数需要整数毫秒并返回
TIMESTAMP
,但我认为你的数据有100ns的精度?

select epoch_ms(133782998237203223 // 100_000);
-- 2012-05-24 03:26:22.372

to_timestamp
函数在几秒钟内获取
DOUBLE
并返回
TIMESTAMP WITH TIME ZONE
:

select to_timestamp(133782998237203223 / 10_000_000);
-- 2012-05-23 20:26:22.372032-07

(显示在

America/Los_Angeles

这两个值都是瞬时值,而不是天真的(本地)时间戳。

© www.soinside.com 2019 - 2024. All rights reserved.