MySQL卡车数据表:按条件生成自定义值列的实现需求咨询
用MySQL CASE WHEN实现自定义状态列
这需求直接用MySQL的CASE WHEN条件判断语句就能搞定,咱们把你的三个条件按优先级拆解,一步步来实现:
核心逻辑拆解
- 优先判断新卡车(NV):先检查
added_in_circulation是否是2023年及以后的日期(注意你的日期格式是DD/MM/YYYY,得先转成DATE类型再比较才准确) - 然后判断已退出且在过去3年(R):满足
removed=1,同时date_removed在当前日期往前推3年的范围内 - 剩余情况统一返回ES:包括未退出流通(
removed=0),或者已退出但超过3年的卡车
完整查询代码
SELECT registration AS Registration, CASE -- 条件1:2023年及以后投入流通的新卡车 WHEN STR_TO_DATE(added_in_circulation, '%d/%m/%Y') >= '2023-01-01' THEN 'NV' -- 条件2:过去3年内已退出流通的卡车 WHEN removed = 1 AND STR_TO_DATE(date_removed, '%d/%m/%Y') >= CURDATE() - INTERVAL 3 YEAR THEN 'R' -- 条件3:其余所有情况 ELSE 'ES' END AS R_ES_V FROM your_truck_table; -- 替换成你的实际表名
关键细节说明
- 日期格式转换:用
STR_TO_DATE(字段名, '%d/%m/%Y')把字符串格式的日期转成MySQL能识别的DATE类型,避免字符串直接比较导致的逻辑错误(比如12/03/2023和01/01/2023直接比字符串会出问题) - 过去3年的计算:
CURDATE() - INTERVAL 3 YEAR会自动计算当前日期往前推3年的日期,不用手动写死年份,适配任何时间点的查询 - 条件优先级:CASE WHEN是从上到下匹配的,所以一定要把优先级高的条件(比如新卡车的NV)放在前面,否则会被后面的条件覆盖
把这段代码嵌入到你已有的查询逻辑里就行,测试你的示例数据,完全能得到你想要的输出结果~
内容的提问来源于stack exchange,提问作者Aphshir
相关产品推荐
相关产品推荐

