我的 BQ 表中有两个日期字段。一个是
start_date
,另一个是end_date
。两列的数据类型均为:DATE
。数据如下:
start_date end_date
2022-02-28 2022-02-28
2022-02-28 2022-03-01
2022-03-01 2022-03-02
2022-03-01 2022-04-01
我需要创建一个新列并检查两个日期是否在同一个月内。值为“是”和“否”。如果两个日期在同一个月内,则为“是”,否则为“否”。 这是所需的输出:
start_date end_date outcome
2022-02-28 2022-02-28 yes
2022-02-28 2022-03-01 no
2022-03-01 2022-03-02 yes
2022-03-01 2022-04-01 no
我尝试过:
select
case
when (DATE(start_date)) = (
DATE(end_date),
INTERVAL 1 MONTH
)
) then 'yes'
else 'no'
end as outcome
FROM
my_bq_table
出现错误:
No matching signature for operator = for argument types: DATE, STRUCT<DATE, INTERVAL>. Supported signature: ANY = ANY
我建议使用“提取”来完成此任务。请看下面。
架构(MySQL v8.0)
CREATE TABLE Date_Table (
`start_date` DATE,
`end_date` DATE
);
INSERT INTO Date_Table
(`start_date`, `end_date`)
VALUES
('2022-02-28', '2022-02-28'),
('2022-02-28', '2022-03-01'),
('2022-03-01', '2022-03-02'),
('2022-03-01', '2022-04-01');
查询#1
select *,
case when extract(month from start_date) = extract(month from end_date) then "Yes" else "No" End as Same_Month
from Date_Table;
开始日期 | 结束日期 | 同月 |
---|---|---|
2022-02-28 | 2022-02-28 | 是的 |
2022-02-28 | 2022-03-01 | 没有 |
2022-03-01 | 2022-03-02 | 是的 |
2022-03-01 | 2022-04-01 | 没有 |
日期(DATE_TRUNC(开始日期,月份)