2016-06-28 2 views
0

У меня есть простой SQL-запрос, который будет искать совпадающие строки между двумя диапазонами дат. Формат даты для поиска - 'yyyymm' -> год-месяц.Получить строки между двумя диапазонами дат

Я написал следующий запрос, но он дает мне ошибку

SELECT * 
FROM `my_table` 
WHERE added_on BETWEEN EXTRACT(YEAR_MONTH FROM `added_on`)='201606' AND 
         EXTRACT (YEAR_MONTH FROM `added_on`)='201706' 

# 1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи '=' 201606' И ЭКСТРАКТ (YEAR_MONTH FROM `added_on` ) = '201706' LIMIT 0, 30' в строке 1

+2

'WHERE ADDED_ON МЕЖДУ«201606»И ' 201706'' – Blank

+0

он должен быть динамическим ... 2016-06-08 будет передано пользователем. Я хочу извлечь год-месяц из строки –

+1

'BETWEEN' может обрабатывать только значения, а не условия, последнее - то, что вы пытаясь сделать –

ответ

2

Я не думаю, что в этом случае необходимо использовать EXTRACT. Вместо этого, вы можете попробовать:

SELECT * 
FROM `my_table` 
WHERE added_on BETWEEN '20160601' AND '20170630' 
0

Попробуйте DATE_FORMAT(date,'%Y%m')/EXTRACT(YEAR_MONTH FROM date) для достижения yyyymm

Использование date_format

SELECT * 
FROM `my_table` 
WHERE DATE_FORMAT(added_on,'%Y%m') BETWEEN '201606' AND '201706' 

Использование ЭКСТРАКТ

SELECT * 
FROM `my_table` 
WHERE EXTRACT(YEAR_MONTH FROM added_on) BETWEEN '201606' AND '201706' 

Без использования их

Добавить 01 к первой дате и 31 на второй date.This представляют первые и последние дни месяца

SELECT * 
FROM `my_table` 
WHERE added_on BETWEEN '20160601' AND '20170631' 
+0

Этого никогда не приходило в голову, но имейте в виду, что это может быть очень медленный запрос на больших наборах данных (= мы говорим от сотни тысяч до миллионов строк) –

0

Попробуйте этот запрос

SELECT * 
FROM `my_table` 
WHERE EXTRACT(YEAR_MONTH FROM `added_on`) BETWEEN EXTRACT(YEAR_MONTH FROM '201606') AND EXTRACT(YEAR_MONTH FROM '201706') 

'201606' и '201706' должно быть пользователем inpu т. Если столбец ADDED_ON тип данных дата, написать ЭКСТРАКТ (YEAR_MONTH ОТ added_on) Если не дата тип данных, просто написать имя столбца

0

Вы можете использовать ниже запрос -

SELECT * FROM `my_table` WHERE added_on BETWEEN REPLACE(SUBSTRING_INDEX(added_on,'-',2),'-','')='201606' AND REPLACE(SUBSTRING_INDEX(added_on,'-',2),'-','')='201706'; 
Смежные вопросы