gpt4 book ai didi

mysql - 计算MySQL中有多少个月

转载 作者:可可西里 更新时间:2023-11-01 07:37:51 25 4
gpt4 key购买 nike

我正在创建一个 child 登记系统,我需要计算出 child 有几个月大。这很容易,但是我只想提取“生日月”的 child 。

我所说的“月份生日”的意思是,如果他们出生在 11 月 23 日,那么 12 月 23 日就是他们 1 个月大的生日。 1 月 23 日是他们 2 个月大的生日。等等……

现在我下面的代码告诉我他们有多少个月了,但不知道是否是他们的“生日月”。

我有什么想法可以让它发挥作用吗?

SELECT PERIOD_DIFF( DATE_FORMAT('2011-11-23', '%Y%m'), DATE_FORMAT(birthday.meta_value, '%Y%m') ) AS months 
FROM $db->members AS m
JOIN $db->members_meta AS birthday ON birthday.member_id = m.id AND birthday.meta_key = 'birthday' AND birthday.meta_value != ''
WHERE AND m.deleted = 0
GROUP BY m.id

我想我们还需要考虑他们是否出生在闰年(2 月 29 日)、30 日和 31 日。我发现这段代码适用于找出它们

(
2012 % 4 <> 0
OR (
2012 % 100 = 0
AND 2012 % 400 <> 0
)
)
AND '11-23' = '03-01' // 11-23 is the current month and day
AND DATE_FORMAT(birthday.meta_value, '%m-%d') = '02-29'

最佳答案

下面的查询已完成并经过测试。如果您想要所有今天过生日的人的 ID,它应该对您有用。

注意,你要知道今天是不是这个月的最后一天,你要知道他们是不是这个月的最后一天出生的。

假设您有一个 id 列,这应该可以为您完成。我已经测试了这个查询,我相信它会做你想要的。如果没有,请发表评论,以便我更好地了解您的要求。

SELECT `id`
FROM $db->members AS m
JOIN $db->members_meta AS birthday
ON birthday.member_id = m.id
AND
birthday.meta_key = 'birthday'
AND
birthday.meta_value != ''
WHERE
(
-- If it's a match, it's a match
DATE_FORMAT(birthday.meta_value, '%d') = DATE_FORMAT('2011-11-23', '%d')
OR
IF
(
-- If today is the last day of this month, we want to close out the month.
DATEDIFF(LAST_DAY('2011-11-23'), '2011-11-23') = 0,
-- Match all birthdays that have a day greater than today.
DATE_FORMAT(birthday.meta_value, '%d') > DATE_FORMAT('2011-11-23', '%d'),
0
)
OR
)
AND
m.deleted = 0
GROUP BY m.id
;

关于mysql - 计算MySQL中有多少个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8751892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com