You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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; -- 替换成你的实际表名

关键细节说明

  1. 日期格式转换:用STR_TO_DATE(字段名, '%d/%m/%Y')把字符串格式的日期转成MySQL能识别的DATE类型,避免字符串直接比较导致的逻辑错误(比如12/03/2023和01/01/2023直接比字符串会出问题)
  2. 过去3年的计算:CURDATE() - INTERVAL 3 YEAR会自动计算当前日期往前推3年的日期,不用手动写死年份,适配任何时间点的查询
  3. 条件优先级:CASE WHEN是从上到下匹配的,所以一定要把优先级高的条件(比如新卡车的NV)放在前面,否则会被后面的条件覆盖

把这段代码嵌入到你已有的查询逻辑里就行,测试你的示例数据,完全能得到你想要的输出结果~

内容的提问来源于stack exchange,提问作者Aphshir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:32:33