我在 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 用于您知道是离散的值范围
我想 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 用于您知道是离散的值范围