我可以创建用户定义的函数并计算给定月份的总天数.是否有直接的方法在给定日期内在给定月份内没有天数
例如.
select date_t, some_inbuilt_function_get_total_no_of_days_in_month(date_t)
从给定日期开始有月份功能,同样有日期功能,所以我可以去月初.有日期差异功能,但没有办法到月底.
参考:https://cloud.google.com/bigquery/docs/reference/legacy-sql
这可能是审美偏好的问题,但下面看起来更优雅
#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中使用它,请查看以下示例(但仍考虑迁移到标准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)