如何在BigQuery中编写日期条件语句计算指定天数列?
BigQuery中实现日期条件计算天数的正确方式
需求说明
需要生成一个计算天数的列,逻辑规则如下:
- 当
Order Date处于2020-01-01至2020-03-31区间内时,计算DATE_DIFF('2020-01-31', Order Date, DAY) - 其他情况返回0
示例数据表格:
| Customer ID | Order Date |
|---|---|
| 298 | 2020-02-28 |
| 78 | 2020-04-02 |
| 31 | 2021-01-09 |
| 345 | 2021-09-09 |
| 74 | 2020-01-20 |
原代码问题分析
你尝试的代码存在两处关键错误:
- 逻辑判断错误:使用
and连接Order Date <'2020-01-01'和Order Date >'2020-03-31',这两个条件不可能同时成立,完全不符合需求中的区间判断逻辑。 - IF函数语法错误:BigQuery中
IF函数的正确格式是IF(判断条件, 满足条件的返回值, 不满足条件的返回值),你将返回值用括号包裹的写法不符合语法规范。
正确实现代码
SELECT `Customer ID`, `Order Date`, IF( `Order Date` BETWEEN '2020-01-01' AND '2020-03-31', DATE_DIFF(DATE '2020-01-31', `Order Date`, DAY), 0 ) AS Calculated_Days FROM `your-project.your-dataset.your-table`;
代码说明
- 使用
BETWEEN简洁判断日期是否在目标区间,等价于Order Date >= '2020-01-01' AND Order Date <= '2020-03-31',两种写法均可。 - 用
DATE '2020-01-31'显式声明日期类型,避免隐式转换可能带来的问题。 - 为计算列命名
Calculated_Days,便于后续识别和使用。
示例执行结果
| Customer ID | Order Date | Calculated_Days |
|---|---|---|
| 298 | 2020-02-28 | -28 |
| 78 | 2020-04-02 | 0 |
| 31 | 2021-01-09 | 0 |
| 345 | 2021-09-09 | 0 |
| 74 | 2020-01-20 | 11 |
注意:
DATE_DIFF的计算逻辑是结束日期 - 开始日期,如果Order Date晚于2020-01-31,结果会为负数。若需要返回正数,可使用ABS(DATE_DIFF(DATE '2020-01-31',Order Date, DAY))取绝对值。
内容的提问来源于stack exchange,提问作者mp.kaur
相关产品推荐
相关产品推荐

