我在 sql 中一起使用 like 和 where 子句时遇到问题

I have problem to use like and where clause together in sql

我想 select 来自 SQL table 的数据,并同时使用 LIKE 和 BETWEEN 子句从 table 获取数据,我在下面尝试过查询。

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

但它显示错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN '%2019-09-20%' AND '%2019-09-29%' LIMIT 0, 25' at line 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')

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'

您可以使用 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)

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

BETWEEN 用于比较数字或日期以查看它们是否在一个范围内。 Between 包括开始值和结束值。 BETWEEN 1 and 5 returns 任何包含 1、2、3、4 或 5 的记录

它们不能一起使用,你用一个或另一个。

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

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

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

这就像说 BETWEEN ... AND 9.9 因为您正在寻找小于 10.. 的值..一天revere是一个值9.99,即使你用了BETWEEN ... AND 9.99一天也会有9.999等等。如果你想要"less than 10",使用< 10

尝试仅将 BETWEEN 用于您知道是离散的值范围