SELECT
*,
(
CASE
WHEN d < CURRENT_DATE THEN
- 1
WHEN d = CURRENT_DATE THEN
0
WHEN d > CURRENT_DATE THEN
1
END
) AS x
FROM
(
SELECT
id,
user_name,
real_name,
user_level,
birthday,
positions,
(
CASE
WHEN MONTH (CURRENT_DATE) = 12
AND MONTH (birthday) = 1 THEN
DATE_ADD(d, INTERVAL + 1 YEAR)
WHEN MONTH (CURRENT_DATE) = 1
AND MONTH (birthday) = 12 THEN
DATE_ADD(d, INTERVAL - 1 YEAR)
ELSE
d
END
) d
FROM
(
SELECT
*, STR_TO_DATE(
REPLACE (
DATE_FORMAT(birthday, '%Y-%m-%d'),
YEAR (birthday),
YEAR (CURRENT_DATE)
),
'%Y-%m-%d'
) d
FROM
user_info
) t1
) t2
WHERE
t2.d BETWEEN ADDDATE(CURRENT_DATE, - 30)
AND ADDDATE(CURRENT_DATE, 30)
ORDER BY
x ASC,
t2.d ASCMySQL 取生日段
最新推荐文章于 2024-05-22 22:46:26 发布
本文介绍了一个复杂的SQL查询案例,该查询用于找出近期即将过生日的用户,并根据他们的生日与当前日期的关系进行分类。通过使用CASE WHEN语句和DATE_ADD函数等,确保了返回的数据既包括即将过生的用户也包括刚过完生日的用户。

772

被折叠的 条评论
为什么被折叠?



