是否有函数可以在 Trino SQL 中提取日期时间变量的时间部分?

Is there a function to extract the time part of a datetime variable in Trino SQL?

提问人:Misha 提问时间:9/24/2023 更新时间:9/24/2023 访问量:123

问:

是否有函数可以在 Trino SQL 中提取日期时间变量的时间部分,包括纳秒? --和/或-- 是否有相应的比较运算符允许仅比较 Trino SQL 中日期时间变量的时间部分(包括纳秒)?

我知道我可以使用 HOUR()、MINUTE()、SECOND() 来提取这些元素,但我找不到一个“一次性”函数来从时间戳中提取时间。

例如,如果时间是“2020-05-11 11:15:05.123456789 +01:00”,我想知道是否有返回的函数(即没有日期部分)。我可以将日期时间转换为时间(例如,,但这不会给出小数秒。 例如,yields ,删除小数秒。'11:15:05.123456789'CAST(my_date_time_variable as time)CAST('2020-05-11 11:15:05.123456789 +01:00' as time)'11:15:05'

magical_trino_sql_function('2020-05-11 11:15:05.123456789 +01:00')
-- '11:15:05.123456789'

magical_trino_sql_function('2020-05-11 11:15:05.123456789 +01:00')
-- 11:15:05.123456789

我为什么要这样做?

我想使用如下所示的 WHERE 语句。

WHERE magical_trino_sql_function(date_time_variable) BETWEEN 09:30:00.000000000 and 16:00:00.000000000

这是现在几乎可以工作的笨拙代码:

WHERE my_date_time_variable BETWEEN date_add('minute', 30, date_add('hour', 9, my_date_variable)) AND
date_add('hour', 16, my_date_variable)

哪里看起来像和看起来像.my_date_time_variable2020-05-11 11:15:05.123456789 +01:00my_date_variable2020-05-11

我遇到的一个问题是,超过毫秒的小数秒似乎被截断了,并且生成的时间被四舍五入,所以像这样的东西被四舍五入到 ,但我不想在上面的 WHERE 语句中包含它。2020-05-11 09:29:59.999876543 +01:002020-05-11 09:30:00.000 +01:00

当我比较日期时,我使用类似的东西

WHERE date_variable BETWEEN date'2023-07-01' AND date'2023-07-31'

有什么东西可以将日期时间变量的时间部分与小数秒进行比较吗?例如:

WHERE my_date_time_variable BETWEEN time'09:30:00.000' AND time'16:00:00.000'

纳秒很重要,但我也有问题;看这个问题

我搜索了 Trino 文档和典型的搜索引擎,结果是空的。我还查看了提问时出现的问题,以确保我的问题不是重复的。有些问题帮助我改进了我的问题,但我仍然有问题。

SQL 日期 时间戳 trino starburst

评论

0赞 3N1GM4 9/25/2023
我快速浏览了一下 Trino 文档,发现该功能似乎可以满足您的要求?date_format()
1赞 3N1GM4 9/25/2023
所以我想是这样的 - 我没有安装这个 DBMS 来测试它,所以除非你让我知道它有效,否则不会发布作为答案。SELECT date_format(TIMESTAMP '2023-09-25 11:22:15.456', '%H:%i:%S.%f')
0赞 Misha 9/26/2023
@3N1GM4我做了,Trino 回来了,所以微秒和纳秒仍然被截断。Trino 文档中 %f 的“MySQL 日期函数”下的部分指出“秒的分数(用于打印的 6 位数字:......1-9 位数字用于解析:...,时间戳被截断为毫秒。这是否意味着纳秒被保留(例如,用于比较)购买不显示?SELECT date_format(TIMESTAMP '2023-01-10' 09:30:00.123456789-05:00', '%H:%i:%S.%f')09:30:00.1230000000009990000999999999

答: 暂无答案