现在我想分享我的最终解决方案:
SELECT mem_id, mem_dateBirth, MONTH(mem_dateBirth), DAY(mem_dateBirth)
FROM rs_mem
WHERE mem_dateBirth IS NOT NULL AND
mem_dateBirth > '1900-01-01'
ORDER BY (date_format(NOW(), '%m%d') >= date_format(mem_dateBirth, '%m%d')),
date_format(mem_dateBirth, '%m%d');
结果将是包含所有即将到来的生日的列表(如果生日是在年度更改之后也是如此)。
答案 0 :(得分:0)
您的查询没问题,这是使用CASE
语句订购结果的另一种方法:
SELECT M.mem_id
, M.mem_dateBirth
, MONTH(mem_dateBirth) AS month
, DAY(mem_dateBirth) AS day
FROM rs_mem M
WHERE IFNULL(M.mem_dateBirth, '1900-01-01') > '1900-01-01'
ORDER BY CASE
WHEN DATE_FORMAT(M.mem_dateBirth, '%m%d') >= DATE_FORMAT(NOW(), '%m%d') THEN 1
ELSE 0
END DESC, date_format(mem_dateBirth, '%m%d');
我还修改了您的WHERE
子句,以缩短它(使用IFNULL
)。
希望这会对你有所帮助。
答案 1 :(得分:0)
MSSQL:TOP 10是前10条记录,你可以删除所有记录。
SELECT TOP 10 mem_id, mem_dateBirth, MONTH(mem_dateBirth), DAY(mem_dateBirth)
FROM rs_mem
WHERE mem_dateBirth IS NOT NULL AND
mem_dateBirth > '1900-01-01' AND
mem_dateBirth > DATE()
ORDER BY mem_dateBirth
MYSQL:限制0,10是前10条记录,你可以删除所有记录。
SELECT mem_id, mem_dateBirth, MONTH(mem_dateBirth), DAY(mem_dateBirth)
FROM rs_mem
WHERE NOT isnull(mem_dateBirth) AND
mem_dateBirth > '1900-01-01' AND
mem_dateBirth > CURDATE()
ORDER BY mem_dateBirth limit 0,10