如何将字符串季度年转换为 Databricks 中的时间戳 SQL
How can I convert a string quarter year to a timestamp in Databricks SQL
在 Databricks SQL 中,如何将字符串格式 "2021Q2"
的日期转换为该季度最后一天的时间戳?
select
to_timestamp(
last_day(
to_date(
(left('2021Q4',4)||'-'||int(right('2021Q4',1)*3))||'-'||'1')))
from
my_table
简单的方法:
select to_timestamp(last_day(concat('2021','-',0,4*3,'-01'))) as last_date_queter
逻辑:
- 使用 3 的倍数计算季度的最后一个月。例如计算第 4 季度的最后一个月
12 (4*3)
concat (year,'-',-01)
这样我们就可以得到相应月份的第一天 2021-12-01
last_day
我们可以使用给定日期月份的最后一天。
- 最后,我们可以将日期转换成时间戳
to_timestamp
遗憾的是,Q 无法从字符串格式化为日期对象(它只能反向工作)- 遗憾的是,用 to_date(date, "YYYY'QQ") 解析 Q 不会工作。
根据https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html:
“E”、“F”、“q”和“Q”的符号只能用于日期时间格式,例如date_format。它们不允许用于日期时间解析,例如to_timestamp.
因此我们必须将季度和乘以 4 分开。然后将其转换为日期对象(parse_ 并取 last_date 月份:
SELECT
last_day(
to_date(
concat(left("2021Q4", 4), int(right("2021Q4", 1))*3),
"yyyyMM")
) as last_day_of_quarter
在 Databricks SQL 中,如何将字符串格式 "2021Q2"
的日期转换为该季度最后一天的时间戳?
select
to_timestamp(
last_day(
to_date(
(left('2021Q4',4)||'-'||int(right('2021Q4',1)*3))||'-'||'1')))
from
my_table
简单的方法:
select to_timestamp(last_day(concat('2021','-',0,4*3,'-01'))) as last_date_queter
逻辑:
- 使用 3 的倍数计算季度的最后一个月。例如计算第 4 季度的最后一个月
12 (4*3)
concat (year,'-',-01)
这样我们就可以得到相应月份的第一天2021-12-01
last_day
我们可以使用给定日期月份的最后一天。- 最后,我们可以将日期转换成时间戳
to_timestamp
遗憾的是,Q 无法从字符串格式化为日期对象(它只能反向工作)- 遗憾的是,用 to_date(date, "YYYY'QQ") 解析 Q 不会工作。
根据https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html: “E”、“F”、“q”和“Q”的符号只能用于日期时间格式,例如date_format。它们不允许用于日期时间解析,例如to_timestamp.
因此我们必须将季度和乘以 4 分开。然后将其转换为日期对象(parse_ 并取 last_date 月份:
SELECT
last_day(
to_date(
concat(left("2021Q4", 4), int(right("2021Q4", 1))*3),
"yyyyMM")
) as last_day_of_quarter