2014-01-27 4 views
2

У меня есть таблица, которая содержит записи людей в зависимости от месяца и года. Таблица имеет несколько столбцов, в которых есть два столбца, которые являются fldmonth & fldyear, которые содержат месяц no и год соответственно.выбрать записи между двумя месяцами с разницей в году

Теперь я хочу получать данные между месяцами разного года. (Например, от 3-2012 до 6-2013)

Я использую следующий запрос, но не получаю надлежащую запись.

SELECT * FROM 'table' WHERE 
user_id = 'id' AND 
STR_TO_DATE(CONCAT('fldyear', 'fldmonth', '01'), '%Y%m%d') BETWEEN 
STR_TO_DATE(CONCAT('2012', '3', '01'), '%Y%m%d') AND 
STR_TO_DATE(CONCAT('2013', '6','01'), '%Y%m%d'); 

Таблица схемы:

user_id varchar(100), fldmonth smallint(2), fldyear mediumint(4) 

(имя таблицы & Идентификатор_пользователя приведены здесь только для примера)

Пожалуйста, нужна помощь.

Примечание: Я использовал% c также в формате даты, потому что месяц находится в 1,2, .. 12 формате. Но все же я получаю пустой набор результатов

+0

добавьте [sqlfiddle] (http://sqlfiddle.com), пожалуйста, –

+0

извините, но данные чувствительны. Пожалуйста, рассмотрите пример. – Shri

+0

Что на самом деле проблема с этим запросом? – Sadikhasan

ответ

1
SELECT * FROM tbl 
WHERE USERID=1 and 
STR_TO_DATE(CONCAT(fldyear,'-',LPAD(fldmonth,2,'00'),'-',LPAD(fldate,2,'00')), '%Y-%m-%d') 
BETWEEN 
STR_TO_DATE(CONCAT(2012,'-',LPAD(03,2,'00'),'-',LPAD(01,2,'00')), '%Y-%m-%d') AND 
STR_TO_DATE(CONCAT(2013,'-',LPAD(06,2,'00'),'-',LPAD(01,2,'00')), '%Y-%m-%d'); 

Working Fiddle

1

Удалить Single quote из названий колонок.

Попробуйте это:

SELECT * 
FROM table 
WHERE user_id = 'id' AND 
     STR_TO_DATE(CONCAT(fldyear, fldmonth, '01'), '%Y%c%d') BETWEEN '2012-03-01' AND '2013-06-01'; 
+0

Работает, но возвращает пустой набор результатов. – Shri

+0

@ Шри, можете ли вы разместить схему таблиц? –

+0

fldmonth содержит месяц nos like 1,2,3,4, ... 10,11,12 format – Shri

0

Saharsh Шах правильно, но то, что вам нужно, чтобы добавить кронштейны () тоже в вашем состоянии

изменить состояние с

WHERE user_id = 'id' AND 
(STR_TO_DATE(CONCAT(fldyear, fldmonth, '01'), '%Y%m%d') 
BETWEEN '2012-03-01' AND '2013-06-30'); 
+0

Получение пустого набора результатов. – Shri

Смежные вопросы