如何在Impala中获取前一个月的最后一天?
答
减去从今天月份的一天,你会得到前一个月的最后一天:
date_sub(now(), day(now())
这包括当前时间。
要获得午夜您可以将其截断到有一天开始一个月核减:
date_sub(trunc(now(), 'month'), 1)
两个结果时间戳,但可以很容易地浇铸为字符串。
答
比较
使用的regexp
SELECT
days_sub(
regexp_replace(
regexp_extract(
cast(now() AS string),
'[\\d-]{10}',
0
), /* Get today in format: YYYY-mm-dd */
'\\d{2}$', '01'
), /* Get the first day of this month: YYYY-mm-01 */
1
) /* Subtract one day */
AS DAY
一个衬里
SELECT days_sub(regexp_replace(regexp_extract(cast(now() AS string), '[\\d-]{10}', 0),'\\d{2}$', '01'), 1) AS DAY
使用提取 & 的concat功能
SELECT
days_sub(
concat(
cast(extract(now(),'year') AS string), /* Extract current year*/
'-',
regexp_replace(
cast(extract(now(),'month') AS string), /* Extract current month */
'^\\d$', '0\\0'
), /* Make sure the month has two digits e.g. from '1' create '01' */
'-01'
), /* Concat current year, month and day one */
1
) /* Subtract one day */
AS DAY
一个衬里
SELECT days_sub(concat(cast(extract(now(),'year') AS string), '-', regexp_replace(cast(extract(now(),'month') AS string), '^\\d$', '0\\0'), '-01'), 1) AS DAY
比较
两种选项都导致TIMESTAMP
类型的相同的结果:
2017-06-30 00:00:00
可以投编辑字符串使用cast(result as string)
正则表达式方式似乎对我更可读,所以我使用该版本。
哇,那太优雅了,不可能是真的:D – jirislav
@jirislav:不,太简单了:-) – dnoeth