【发布时间】:2022-12-20 20:30:51
【问题描述】:
我正在尝试获取一个日期范围为日期的字符串,例如“W202243 从 10 月 24 日到 10 月 30 日”,从每个星期一到星期日。为了实现这一点,我正在使用 impala,逐步创建字符串。
我的功能是:
select distinct concat('W',substr(cast(a.day_key AS string),1,4), IF (DAYOFWEEK(from_unixtime(unix_timestamp(cast(cast(a.day_key AS string) AS string), "yyyyMMdd")))=2, cast(weekofyear(from_unixtime(unix_timestamp(cast(cast(a.day_key AS string) AS string), "yyyyMMdd")))-1 AS string), cast(weekofyear(from_unixtime(unix_timestamp(cast(cast(a.day_key AS string) AS string), "yyyyMMdd"))) AS string)), ' from ', SUBSTR(substr(cast(TRUNC(date_add(from_unixtime(unix_timestamp(cast(a.day_key AS string), "yyyyMMdd")),-1),'DY') AS string), 9,10),1,2), '-', SUBSTR(MONTHNAME(date_add(TRUNC(date_add(from_unixtime(unix_timestamp(cast(a.day_key AS string), "yyyyMMdd")),-1),'DY'),1)),1,3),' a ', SUBSTR(substr(cast(date_add(TRUNC(date_add(from_unixtime(unix_timestamp(cast(a.day_key AS string), "yyyyMMdd")),-1),'DY'),6) AS string), 9,10),1,2), '-', SUBSTR(MONTHNAME(date_add(TRUNC(date_add(from_unixtime(unix_timestamp(cast(a.day_key AS string), "yyyyMMdd")),-1),'DY'),6)),1,3))
结果几乎是正确的,除非一周的第一天也是一个月的最后一天,这给了我这个不需要的结果:(例如 W202244 从 11 月 31 日到 11 月 6 日 -> 11 月而不是 10 月)。 我可以在查询中添加什么来解决这个问题?
【问题讨论】:
标签: sql impala truncate date-range