求助:MySQL查询距今16年以上发票的通用SQL语句
查询超过16年的发票SQL语句
最终推荐SQL语句
SELECT * FROM invoices WHERE invoice_date < DATE_SUB(NOW(), INTERVAL 16 YEAR);
语句说明
DATE_SUB(NOW(), INTERVAL 16 YEAR)会自动计算当前日期往前推16年的日期,无需手动指定固定日期,每次执行都会基于当前时间动态计算,完全满足你“随时生效”的需求。- 如果一定要用你提到的
EXTRACT(YEAR FROM NOW())写法,也可以这样写,但准确性稍差:
SELECT * FROM invoices WHERE EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM invoice_date) > 16;
注:第二种写法只对比年份差,会把16年前全年的发票都筛选出来(比如当前是2024年5月,2008年12月的发票也会被选中);而第一种写法会精确到日,只筛选出16年前当天之前的发票,业务场景中通常更符合需求。
额外注意
如果你的发票日期字段是字符串类型,需要先转换成日期格式再比较,比如字段存储格式是YYYY-MM-DD,语句要调整为:
SELECT * FROM invoices WHERE STR_TO_DATE(invoice_date, '%Y-%m-%d') < DATE_SUB(NOW(), INTERVAL 16 YEAR);
内容的提问来源于stack exchange,提问作者Muzino
相关产品推荐
相关产品推荐

