带where子句的生日
Birthday with where clause
谁能帮我解决这个问题
脚本
这就是我想要实现的目标
table
id name tag_id status dob
== ======= ======== ======== ========
1 a 1 Married 02/23/1977
2 b 1 Single 02/23/1978
3 c 2 Single 02/23/1960
4 d 1 Married 02/23/1985
5 e 2 Married 02/23/1999
6 f 2 Diovice 02/23/1999
7 g 1 Married 02/28/1999
8 h 2 Married 02/28/1999
9 i 1 Married 03/12/1990
我很乐意通过 mysql 查询获得现在/当前的生日庆祝者
这是我的代码:
SELECT * FROM table
WHERE (MONTH(STR_TO_DATE(dob, '%d/%m/%Y'))=MONTH(CURDATE())
AND (DAY(STR_TO_DATE(dob, '%d/%m/%Y'))=DAY(CURDATE())))
OR (DAY(LAST_DAY(STR_TO_DATE(dob, '%d/%m/%Y')))=29
AND (DAY(STR_TO_DATE(bob, '%d/%m/%Y'))=29)
AND (DAY(LAST_DAY(CURDATE()))=28))
AND ( STATUS = 'Married' OR STATUS = 'Single' )
AND tag_id = 1
ORDER BY id ASC
我的问题是上面的代码只是返回所有当前的生日,但我想要的是这样的:
结果:
1 a 1 Married 02/23/1977
2 b 1 Single 02/23/1978
4 d 1 Married 02/23/1985
7 g 1 Married 02/28/1999
错误结果(由上述查询产生):
1 a 1 Married 02/23/1977
2 b 1 Single 02/23/1978
4 d 1 Married 02/23/1985
7 g 1 Married 02/28/1999
8 h 2 Married 02/28/1999
而我想要的是,我只想要今天的生日庆祝者/ ID = 1。就像我指定的第一个结果一样。
SELECT * FROM table
WHERE MONTH(dob) = MONTH(GETDATE()) AND DAY(dob) = DAY(GETDATE())
and tag_id = 1 and status in ('pending','active')
这应该有效。
OR
查询给了你错误的结果。(我不确定你为什么选择)
这是为前两个查询和其余查询创建 or 条件
因此,请将 OR
查询括在方括号中。
然后,你将AND tag_id = 1
执行。
SELECT * FROM table WHERE
(MONTH(STR_TO_DATE(dob, '%d/%m/%Y'))=MONTH(CURDATE())
AND
(DAY(STR_TO_DATE(dob, '%d/%m/%Y'))=DAY(CURDATE())))
OR
(
(DAY(LAST_DAY(STR_TO_DATE(dob, '%d/%m/%Y')))=29
AND
(DAY(STR_TO_DATE(bob, '%d/%m/%Y'))=29)
AND
(DAY(LAST_DAY(CURDATE()))=28))
)
AND
( STATUS = 'ACTIVE' OR STATUS = 'PENDING' )
AND
tag_id = 1
ORDER BY id ASC
这后来对我有用,它可能会帮助其他人,我很乐意看到这个答案的更多改进:
SELECT * FROM table WHERE MONTH(STR_TO_DATE(dob, '%d/%m/%Y')) = MONTH(NOW()) AND DAY(STR_TO_DATE(dob, '%d/%m/%Y')) = DAY(NOW()) AND TAG_ID = 2 AND STATUS IN ('single','married')
谁能帮我解决这个问题
脚本
这就是我想要实现的目标
table
id name tag_id status dob
== ======= ======== ======== ========
1 a 1 Married 02/23/1977
2 b 1 Single 02/23/1978
3 c 2 Single 02/23/1960
4 d 1 Married 02/23/1985
5 e 2 Married 02/23/1999
6 f 2 Diovice 02/23/1999
7 g 1 Married 02/28/1999
8 h 2 Married 02/28/1999
9 i 1 Married 03/12/1990
我很乐意通过 mysql 查询获得现在/当前的生日庆祝者 这是我的代码:
SELECT * FROM table
WHERE (MONTH(STR_TO_DATE(dob, '%d/%m/%Y'))=MONTH(CURDATE())
AND (DAY(STR_TO_DATE(dob, '%d/%m/%Y'))=DAY(CURDATE())))
OR (DAY(LAST_DAY(STR_TO_DATE(dob, '%d/%m/%Y')))=29
AND (DAY(STR_TO_DATE(bob, '%d/%m/%Y'))=29)
AND (DAY(LAST_DAY(CURDATE()))=28))
AND ( STATUS = 'Married' OR STATUS = 'Single' )
AND tag_id = 1
ORDER BY id ASC
我的问题是上面的代码只是返回所有当前的生日,但我想要的是这样的:
结果:
1 a 1 Married 02/23/1977
2 b 1 Single 02/23/1978
4 d 1 Married 02/23/1985
7 g 1 Married 02/28/1999
错误结果(由上述查询产生):
1 a 1 Married 02/23/1977
2 b 1 Single 02/23/1978
4 d 1 Married 02/23/1985
7 g 1 Married 02/28/1999
8 h 2 Married 02/28/1999
而我想要的是,我只想要今天的生日庆祝者/ ID = 1。就像我指定的第一个结果一样。
SELECT * FROM table
WHERE MONTH(dob) = MONTH(GETDATE()) AND DAY(dob) = DAY(GETDATE())
and tag_id = 1 and status in ('pending','active')
这应该有效。
OR
查询给了你错误的结果。(我不确定你为什么选择)
这是为前两个查询和其余查询创建 or 条件
因此,请将 OR
查询括在方括号中。
然后,你将AND tag_id = 1
执行。
SELECT * FROM table WHERE
(MONTH(STR_TO_DATE(dob, '%d/%m/%Y'))=MONTH(CURDATE())
AND
(DAY(STR_TO_DATE(dob, '%d/%m/%Y'))=DAY(CURDATE())))
OR
(
(DAY(LAST_DAY(STR_TO_DATE(dob, '%d/%m/%Y')))=29
AND
(DAY(STR_TO_DATE(bob, '%d/%m/%Y'))=29)
AND
(DAY(LAST_DAY(CURDATE()))=28))
)
AND
( STATUS = 'ACTIVE' OR STATUS = 'PENDING' )
AND
tag_id = 1
ORDER BY id ASC
这后来对我有用,它可能会帮助其他人,我很乐意看到这个答案的更多改进:
SELECT * FROM table WHERE MONTH(STR_TO_DATE(dob, '%d/%m/%Y')) = MONTH(NOW()) AND DAY(STR_TO_DATE(dob, '%d/%m/%Y')) = DAY(NOW()) AND TAG_ID = 2 AND STATUS IN ('single','married')