我可以创建用户定义的函数并计算给定月份的总天数.是否有直接的方法在给定日期内在给定月份内没有天数
例如.
select date_t, some_inbuilt_function_get_total_no_of_days_in_month(date_t)
Run Code Online (Sandbox Code Playgroud)
从给定日期开始有月份功能,同样有日期功能,所以我可以去月初.有日期差异功能,但没有办法到月底.
参考:https://cloud.google.com/bigquery/docs/reference/legacy-sql
Isl*_*zab 12
一个更简单的方法就是
EXTRACT(DAY FROM LAST_DAY(<DATE>))
Run Code Online (Sandbox Code Playgroud)
作为一个函数
CREATE TEMP FUNCTION DaysInMonth(d DATE) AS (
EXTRACT(DAY FROM LAST_DAY(d))
);
SELECT DaysInMonth('2017-01-17');
Run Code Online (Sandbox Code Playgroud)
这可能是审美偏好的问题,但下面看起来更优雅
#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');
Run Code Online (Sandbox Code Playgroud)
不知何故,我觉得在大容量上会更优化(如果有任何用例)
下面是另一个版本 - 不太理想
#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')
Run Code Online (Sandbox Code Playgroud)
如果出于任何原因需要在BigQuery Legacy SQL中使用它,请查看以下示例(但仍考虑迁移到标准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)
Run Code Online (Sandbox Code Playgroud)