我可以创建user defined function并计算给定月份的总天数。有没有一种直接的方法来获得给定日期在给定月份中没有天数的总天数?
例如:
select date_t, some_inbuilt_function_get_total_no_of_days_in_month(date_t)有month函数可以从给定的日期获取月份,类似的有date函数,所以我可以转到月份的开始。有日期差异功能,但无法转到月底。
参考:https://cloud.google.com/bigquery/docs/reference/legacy-sql
发布于 2017-01-18 14:54:25
这可能是审美偏好的问题,但下面的对我来说更优雅
#standardSQL
CREATE TEMP FUNCTION DaysInMonth(d DATE) AS (
32 - EXTRACT(DAY FROM DATE_ADD(DATE_TRUNC(d, MONTH), INTERVAL 31 DAY))
);
SELECT DaysInMonth('2017-01-17'); 不知何故,我觉得在大容量的情况下会更好(如果有任何用例的话)
下面是另一个版本--不太理想
#standardSQL
CREATE TEMP FUNCTION DaysInMonth(d DATE) AS (
EXTRACT(DAY FROM DATE_SUB(DATE_ADD(d, INTERVAL 1 MONTH),
INTERVAL EXTRACT(DAY FROM d) DAY))
);
SELECT DaysInMonth('2017-01-17') 如果出于任何原因,您在BigQuery Legacy SQL中需要它,请查看下面的示例(但仍然考虑使用migrating to Standard SQL)。
#legacySQL
SELECT
32 - DAY(DATE_ADD(UTC_USEC_TO_MONTH(PARSE_UTC_USEC(d)),31,'DAY')) as DaysInMonth
FROM (SELECT '2017-01-17' as d)发布于 2021-01-22 21:44:42
一种更简单的方法就是
EXTRACT(DAY FROM LAST_DAY(<DATE>))作为函数
CREATE TEMP FUNCTION DaysInMonth(d DATE) AS (
EXTRACT(DAY FROM LAST_DAY(d))
);
SELECT DaysInMonth('2017-01-17'); 发布于 2017-01-18 06:40:32
使用standard SQL会更容易。您也可以定义自己的函数来简化查询。
#standardSQL
CREATE TEMP FUNCTION DaysInMonth(d DATE) AS (
DATE_DIFF(DATE_TRUNC(DATE_ADD(d, INTERVAL 1 MONTH), MONTH),
DATE_TRUNC(d, MONTH), DAY)
);
SELECT DaysInMonth('2017-01-17');https://stackoverflow.com/questions/41707583
复制相似问题