mysql:date格式不能在where条件下使用

zc0qhyus  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(976)

每当我使用 OR 在我的查询所处的条件下 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 它显示了预期的日期数据,但我想使用 ORwhere 条款。

g6ll5ycj

g6ll5ycj1#

这个 and 逻辑运算符的优先级高于 or 操作员(即。, and 表达式在 or 表达式,就像在计算算术表达式中的加法之前计算乘法一样)。为了达到你想要的行为,你需要围绕着这个世界的两边 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
fhity93d

fhity93d2#

和@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 列。

相关问题