我目前正在使用AWS雅典娜,我正在寻找一个字符串字段'YYYYMM‘到日期(即'202208’到2022-08-dd),并将日期(dd)定义为该月份的最后一天。我首先将字符串转换为日期,然后需要在顶部应用一个函数,将其转换为该月份的最后一天(通常默认情况下,日期将设置为该月的第一天)。
我查看了Presto文档(https://prestodb.io/docs/current/functions/datetime.html),并看到了MySQL Str_to_date函数的部分,但是,当试图在雅典娜中运行下面的内容时,我会收到错误。
SELECT
MONTH,
STR_TO_DATE(CONCAT(MONTH,'01'),'%Y%m%d')
FROM db.table
WHERE MONTH IN ('202208')雅典娜上的错误消息是该函数没有注册'SYNTAX_ERROR: line 3:1: Function str_to_date not registered'。
我现在已经使用了date_parse函数来完成转换,但是输出中有时间戳。虽然它不会影响我在后面运行报告的方式,但有办法删除时间戳吗?
SELECT
MONTH,
date_parse((Month),'%Y%m')
FROM db.table
WHERE MONTH IN ('202208')上述输出为2022-08-01 00:00:00.000
下一步是将此输出日期转换为月份的最后一天。我尝试应用月份的最后一天函数,但不支持它。MySQL的替代方案是什么?是否有支持这一功能的函数,还是应该使用日期中继进行计算?
SELECT
MONTH,
last_day_of_month(date_parse((Month),'%Y%m'))
FROM db.table
WHERE MONTH IN ('202208')谢谢
发布于 2022-10-05 14:42:10
在精神上类似于在other answer中提出的解决方案,但嵌套较少。
SELECT
DATE_PARSE(dt, '%Y%m') + INTERVAL '1' month - INTERVAL '1' day last_day_of_month
FROM (SELECT '202208' dt) t
-- outputs
last_date
2022-08-31 00:00DATE_PARSE(<field>, '%Y%m')是雅典娜中一种有效的日期格式,它将解析为本月的第一个日期。
添加一个interval '1' month,然后删除interval '1' day,就会得到这个月的最后一个日期。您可以删除任何其他较短的间隔,例如,如果您删除了'1' second,您将以时间2022-08-31 23:59:59.000结束。
我现在已经使用了date_parse函数来完成转换,但是输出中有时间戳。虽然它不会影响我在后面运行报告的方式,但有办法删除时间戳吗?
是。通过将值传递给timestamp函数,可以轻松地将date转换为DATE。见下文。
SELECT
DATE(DATE_PARSE(dt, '%Y%m') + INTERVAL '1' month - INTERVAL '1' day) last_day_of_month
FROM (SELECT '202208' dt) t发布于 2022-10-05 14:18:50
一个窍门是将文本日期解析为那个月的第一天。然后,加一个月,减去一天,得到那个月的最后一天。
WITH yourTable AS (
SELECT '202208' AS MONTH
)
SELECT
MONTH,
DATE_ADD('day',
-1,
DATE_ADD('month',
1,
DATE_PARSE(CONCAT(MONTH, '01'), '%Y%m%d'))) AS LAST_DAY
FROM yourTable;https://stackoverflow.com/questions/73961641
复制相似问题