如何在MySQL中基于两列区间为各ID计算生成test标识列
MySQL季度区间判断生成test列方案
你所需的逻辑可以直接用MySQL自带的条件判断函数实现,由于YYYYQX格式的季度字符串的字典序和时间先后顺序完全一致,无需额外做日期格式转换,直接做区间比较即可。
方法1:使用CASE WHEN(兼容性最好,通用所有SQL方言)
示例查询语句如下,你需要将代码中的your_table替换为你的实际表名,quarter替换为你表中存储「数据所属季度」的字段名:
SELECT id, statement_one, latest_statement, quarter, CASE WHEN quarter BETWEEN statement_one AND latest_statement THEN 1 ELSE 0 END AS test FROM your_table;
方法2:使用IF()函数(MySQL专属,写法更简洁)
MySQL支持简化的单条件判断IF()函数,可直接用以下语句实现:
SELECT *, IF(quarter BETWEEN statement_one AND latest_statement, 1, 0) AS test FROM your_table;
若需要将结果持久化存入表中,可执行以下两步操作
- 先给表新增test字段:
ALTER TABLE your_table ADD COLUMN test TINYINT DEFAULT 0 COMMENT '季度区间标记:1=在范围内,0=不在范围内';
- 批量更新字段值:
UPDATE your_table SET test = IF(quarter BETWEEN statement_one AND latest_statement, 1, 0);
注意事项
- 如果你的季度字段不是
YYYYQX的标准格式,比如为2019年第三季度、19Q3等格式,需要先通过字符串函数统一转换为YYYYQX格式后再做比较 - 以上为标准MySQL语法,可直接在MySQL Workbench客户端中运行
内容的提问来源于stack exchange,提问作者gfchqz
相关产品推荐
相关产品推荐

