mysql:日期格式不适用于 OR 在 where 条件下
mysql : date format not working with OR in where condition
每当我在 where 条件下使用 OR
时,我的查询将 date_format()
设置为 date_format()
,但当我使用 AND
时,它工作正常。
真实查询:
SELECT * FROM `tbl_inquiry_trans`
WHERE date_format(follow_updatetime,'%Y-%m-%d') >= '2018-08-02'
AND date_format(follow_updatetime,'%Y-%m-%d') <= '2018-08-02'
AND emp_id=2 or user_id=2
上面的查询应该显示特定的日期数据,但它显示的是所有日期数据。
测试查询:
SELECT * FROM `tbl_inquiry_trans`
WHERE date_format(follow_updatetime,'%Y-%m-%d') >= '2018-08-02'
AND date_format(follow_updatetime,'%Y-%m-%d') <= '2018-08-02'
AND emp_id=2
当我使用 AND
时,它显示的是预期日期数据,但我想在 where
子句中使用 OR
。
and
逻辑运算符的优先级高于 or
运算符(即,and
表达式先于 or
表达式求值,与您类似d 在算术表达式中计算加法之前先计算乘法)。为了实现您想要的行为,您需要用括号将 or
运算符的两侧括起来:
SELECT *
FROM tbl_inquiry_trans
WHERE date_format(follow_updatetime,'%Y-%m-%d')>='2018-08-02' AND
date_format(follow_updatetime,'%Y-%m-%d')<='2018-08-02' AND
(emp_id=2 OR user_id=2) -- Here
与@Mureinik 的答案相同,除了我认为您不需要调用 DATE_FORMAT
,因为在 MySQL 中可以直接将日期与字符串文字进行比较。因此,以下内容就足够了:
SELECT *
FROM tbl_inquiry_trans
WHERE
follow_updatetime >= '2018-08-02' AND follow_updatetime < '2018-08-03' AND
(emp_id = 2 OR user_id = 2);
以上检查 follow_updatetime
的逻辑是,如果日期在 2018-08-02
的 午夜 或之后或严格 2018-08-03
午夜之前。这将涵盖 2018-08-02
的一整天。这个版本比你以前的版本更可取,因为它可以在 follow_updatetime
列上使用索引。
每当我在 where 条件下使用 OR
时,我的查询将 date_format()
设置为 date_format()
,但当我使用 AND
时,它工作正常。
真实查询:
SELECT * FROM `tbl_inquiry_trans`
WHERE date_format(follow_updatetime,'%Y-%m-%d') >= '2018-08-02'
AND date_format(follow_updatetime,'%Y-%m-%d') <= '2018-08-02'
AND emp_id=2 or user_id=2
上面的查询应该显示特定的日期数据,但它显示的是所有日期数据。
测试查询:
SELECT * FROM `tbl_inquiry_trans`
WHERE date_format(follow_updatetime,'%Y-%m-%d') >= '2018-08-02'
AND date_format(follow_updatetime,'%Y-%m-%d') <= '2018-08-02'
AND emp_id=2
当我使用 AND
时,它显示的是预期日期数据,但我想在 where
子句中使用 OR
。
and
逻辑运算符的优先级高于 or
运算符(即,and
表达式先于 or
表达式求值,与您类似d 在算术表达式中计算加法之前先计算乘法)。为了实现您想要的行为,您需要用括号将 or
运算符的两侧括起来:
SELECT *
FROM tbl_inquiry_trans
WHERE date_format(follow_updatetime,'%Y-%m-%d')>='2018-08-02' AND
date_format(follow_updatetime,'%Y-%m-%d')<='2018-08-02' AND
(emp_id=2 OR user_id=2) -- Here
与@Mureinik 的答案相同,除了我认为您不需要调用 DATE_FORMAT
,因为在 MySQL 中可以直接将日期与字符串文字进行比较。因此,以下内容就足够了:
SELECT *
FROM tbl_inquiry_trans
WHERE
follow_updatetime >= '2018-08-02' AND follow_updatetime < '2018-08-03' AND
(emp_id = 2 OR user_id = 2);
以上检查 follow_updatetime
的逻辑是,如果日期在 2018-08-02
的 午夜 或之后或严格 2018-08-03
午夜之前。这将涵盖 2018-08-02
的一整天。这个版本比你以前的版本更可取,因为它可以在 follow_updatetime
列上使用索引。