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

如何编写SQL查询获取指定生日区间的客户(日期格式dd.mm.yyyy)

按生日月日区间筛选客户的SQL解决方案

由于你的date字段存储为dd.mm.yyyy格式的字符串,直接用BETWEEN比较完整日期会受年份干扰。核心解决思路是剥离年份,仅提取月日部分进行匹配,以下分场景给出具体SQL语句:

场景1:生日区间不跨年度(如03.15 ~ 06.20)

以MySQL为例,先将字符串日期转为标准日期类型,再提取mmdd格式的月日字符串进行区间比较:

SELECT * FROM wp_clients
WHERE DATE_FORMAT(STR_TO_DATE(`date`, '%d.%m.%Y'), '%m%d') BETWEEN '0315' AND '0620';

如果使用PostgreSQL,语法类似:

SELECT * FROM wp_clients
WHERE TO_CHAR(TO_DATE(date, 'DD.MM.YYYY'), 'MMDD') BETWEEN '0315' AND '0620';

场景2:生日区间跨年度(如12.20 ~ 01.10)

此时mmdd字符串的起始值大于结束值,不能直接用BETWEEN,需拆分为两个条件的逻辑或:
MySQL版本:

SELECT * FROM wp_clients
WHERE 
  DATE_FORMAT(STR_TO_DATE(`date`, '%d.%m.%Y'), '%m%d') >= '1220'
  OR DATE_FORMAT(STR_TO_DATE(`date`, '%d.%m.%Y'), '%m%d') <= '0110';

PostgreSQL版本:

SELECT * FROM wp_clients
WHERE 
  TO_CHAR(TO_DATE(date, 'DD.MM.YYYY'), 'MMDD') >= '1220'
  OR TO_CHAR(TO_DATE(date, 'DD.MM.YYYY'), 'MMDD') <= '0110';

特殊处理:闰年2月29日的生日

如果有客户生日是2月29日,非闰年时需要额外处理(比如匹配到2月28日),以MySQL为例:

SELECT * FROM wp_clients
WHERE 
  -- 非闰年时,将2月29日生日视为2月28日
  (DATE_FORMAT(STR_TO_DATE(`date`, '%d.%m.%Y'), '%m%d') = '0229' AND DATE_FORMAT(CURDATE(), '%m%d') = '0228')
  OR 
  DATE_FORMAT(STR_TO_DATE(`date`, '%d.%m.%Y'), '%m%d') BETWEEN '0220' AND '0305';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:15:19