У меня есть проблема, чтобы использовать как и где пункт вместе в SQL - PullRequest
1 голос
/ 30 сентября 2019

Я хочу выбрать данные из таблицы SQL и извлечь данные из таблицы, используя предложения LIKE и BETWEEN вместе, и я попытался выполнить запрос ниже.

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

, но он показывает мне ошибку

В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать около 'МЕЖДУ'% 2019-09-20% 'И'% 2019-09-29% 'ПРЕДЕЛ 0, 25' в строке 1

Кто-нибудь может мне помочь с этим.

Ответы [ 4 ]

1 голос
/ 30 сентября 2019

LIKE предназначен только для сравнения строк с шаблоном, который может содержать символы подстановки;Name LIKE 'Smith%' - возвращает все, что начинается со Смита.

МЕЖДУ предназначен для сравнения чисел или дат, чтобы определить, попадают ли они в диапазон. Между включает начальные и конечные значения. 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-го числаассортимент. По этой причине я предпочитаю использовать> и <с диапазонами дат: </p>

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», используйте < 10

Попробуйте использовать только МЕЖДУ для диапазонов значений, которые, как вы знаете, являются дискретными

1 голос
/ 30 сентября 2019

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'
1 голос
/ 30 сентября 2019

вы можете использовать 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)
1 голос
/ 30 сентября 2019

Вы можете рассматривать 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')
...