【问题标题】:I have problem to use like and where clause together in sql我在sql中一起使用like和where子句有问题
【发布时间】:2020-01-29 09:22:46
【问题描述】:

我想从 SQL 表中选择数据并同时使用 LIKE 和 BETWEEN 子句从表中获取数据,我尝试了以下查询。

SELECT * FROM `table_name` WHERE  `date_time` LIKE BETWEEN '%2019-09-20%' AND '%2019-09-29%';

但它显示了错误

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'BETWEEN '%2019-09-20%' AND '%2019-09-29%' LIMIT 0, 25' 附近使用正确的语法

谁能帮帮我。

【问题讨论】:

    标签: mysql sql sql-like


    【解决方案1】:

    您可以将date_time 视为实际日期。

    SELECT * FROM `table_name` WHERE STR_TO_DATE(`date_time`, '%Y-%m-%d') BETWEEN STR_TO_DATE('2019-09-20', '%Y-%m-%d') AND STR_TO_DATE('2019-09-29', '%Y-%m-%d')
    

    【讨论】:

      【解决方案2】:

      LIKE 在这里没用,你想要 date_time 在 2019-09-20 和 2019-09-29 之间的行,可能包括在内。所以你可以使用下面的查询,没有 LIKE

      SELECT * FROM `table_name` WHERE `date_time` BETWEEN '2019-09-20' AND '2019-09-29 23:59:59'
      

      【讨论】:

        【解决方案3】:

        您可以使用subquery 获取最匹配的日期。

        select * from `table_name` where `date_time` between 
            (select `date_time` from `table_name` where `date_time` like '%2019-09-20%' limit 1)  and   
            (select `date_time` from `table_name` where `date_time` like '%2019-09-29%' limit 1)
        

        【讨论】:

          【解决方案4】:

          LIKE 仅用于将字符串与可能包含通配符的模式进行比较; Name LIKE 'Smith%' - 返回以 Smith 开头的任何内容。

          BETWEEN 用于比较数字或日期以查看它们是否属于某个范围。之间包括开始值和结束值。 BETWEEN 1 and 5 返回任何包含 1、2、3、4 或 5 的记录

          它们不能一起使用,你可以使用其中一个。

          日期就像十进制数;日期的时间部分可能意味着日期超出范围。就像 5.5 不是“1 到 5 之间”一样,日期时间 2019-09-29 12:34 也不是“2019-09-20 和 2019-09-29 之间”——只有 29 日午夜才会落在范围。出于这个原因,我倾向于将 > 和

          SELECT * FROM `table_name`
          WHERE
            `date_time` >= '2019-09-20' AND
            `date_time` < '2019-09-30'
          

          这包括从 20 日到 29 日的所有记录,无论 29 日是什么时间。它比介于两者之间更清晰和明确。 BETWEEN ... 23:59:59 的另一个答案也试图捕获小于 30 的所有内容,但这不是一个明智的习惯,因为有一天时间可能只有毫秒等

          这就像说 BETWEEN ... AND 9.9 因为您正在寻找小于 10 的值.. 但是。一天的敬畏是一个值 9.99,即使你使用BETWEEN ... AND 9.99 一天也会有 9.999 等等。如果要“小于 10”,请使用 &lt; 10

          尽量只对你知道是离散的值范围使用 BETWEEN

          【讨论】:

            猜你喜欢
            • 2012-01-07
            • 2012-12-23
            • 2017-08-30
            • 1970-01-01
            • 1970-01-01
            • 2013-11-25
            • 2023-03-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多