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

如何编写无年份限制的SQL查询筛选天秤座对应出生日期记录

原SQL失效原因

BETWEEN运算符仅用于匹配连续的完整日期值,不能和LIKE语法的%通配符混用,因此无法直接按日月后缀过滤不限年份的日期范围。

实现方案

通用兼容写法(所有数据库均可使用)

直接拆分月份和日期做判断,不需要依赖数据库专属函数,逻辑最清晰,兼容性最强:

SELECT * FROM persons 
WHERE 
  (MONTH(BirthDate) = 9 AND DAY(BirthDate) >= 23)
  OR (MONTH(BirthDate) = 10 AND DAY(BirthDate) <= 22);

如果你的数据库不支持MONTH()、DAY()函数,也可以利用BirthDate固定为YYYY-MM-DD格式的特征,截取第6位开始的5位字符(对应MM-DD格式)做匹配:

SELECT * FROM persons 
WHERE SUBSTRING(BirthDate, 6, 5) BETWEEN '09-23' AND '10-22';

不同数据库专属优化写法

  • MySQL:使用DATE_FORMAT提取月日格式
    SELECT * FROM persons 
    WHERE DATE_FORMAT(BirthDate, '%m-%d') BETWEEN '09-23' AND '10-22';
    
  • PostgreSQL/Oracle:使用TO_CHAR提取月日格式
    -- PostgreSQL
    SELECT * FROM persons WHERE TO_CHAR(BirthDate, 'MM-DD') BETWEEN '09-23' AND '10-22';
    -- Oracle
    SELECT * FROM persons WHERE TO_CHAR(BirthDate, 'MM-DD') BETWEEN '09-23' AND '10-22';
    
  • SQL Server:使用FORMAT或者DATEPART
    SELECT * FROM persons WHERE FORMAT(BirthDate, 'MM-dd') BETWEEN '09-23' AND '10-22';
    
注意事项

匹配月日时要统一使用两位数格式,比如9月要写09,避免出现单数字月份匹配失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:27:02