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

PHP+MySQL项目:查询过期体检证用户的SQL语句错误排查

SQL语句错误分析与修复

错误原因

你的SQL语句核心逻辑存在错误:

  • 在WHERE子句中,(data_scadenza_certificato_medico = DATE_ADD(data_scadenza_certificato_medico, INTERVAL 1 YEAR)) 是一个相等比较操作,它只会返回布尔值(0或1),之后用CURRENT_DATE和这个布尔值做大小对比,完全偏离了“判断当前日期是否超过签发日+1年”的需求。

正确逻辑与修复后的SQL

体检证自签发日起有效期1年,过期的判断标准是当前日期晚于签发日期加1年,或者等价的签发日期早于当前日期减1年。

修复后的SQL语句(两种等价写法):

写法一:

SELECT id, nome, cognome, data_scadenza_certificato_medico 
FROM tbl_tesserati 
WHERE CURRENT_DATE > DATE_ADD(data_scadenza_certificato_medico, INTERVAL 1 YEAR) 
  AND rif_tbl_utenti = 1

写法二(如果data_scadenza_certificato_medico字段有索引,这种写法更利于索引命中):

SELECT id, nome, cognome, data_scadenza_certificato_medico 
FROM tbl_tesserati 
WHERE data_scadenza_certificato_medico < DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR) 
  AND rif_tbl_utenti = 1

测试数据验证

以你提供的测试记录为例:data_scadenza_certificato_medico为2023-08-20,加1年后的过期日期是2024-08-20。当当前日期为2024-08-21及以后时,该记录会被正确查询出来,符合“体检证已过期”的判断。

内容的提问来源于stack exchange,提问作者P.Davide

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:26:03