2016-05-19 4 views
0

У меня есть команда sql, которую я хочу проверить, находится ли дата (год, месяц) между датой (днем, месяцем, годом)) и дата (день, месяц, год). Ниже приведена моя команда SQL:Как сравнить дату (год, месяц) с датой (день, месяц, год)

SELECT * 
FROM paytran 
WHERE 
    (StaffID BETWEEN '01' AND '01') 
    AND STR_TO_DATE('01/04/2016', '%d/%m/%Y') BETWEEN STR_TO_DATE(DateFrom, '%d/%m/%Y') AND STR_TO_DATE(DateTo, '%d/%m/%Y') 
    AND SubGroup = '1' 
    AND Week1 = '1' 
    AND PaymentMonth = STR_TO_DATE('2016/04', '%Y%m') BETWEEN STR_TO_DATE('01/03/2016', '%d/%m/%Y') AND STR_TO_DATE('31/12/2016', '%d/%m/%Y') 
    AND FO = 'F' 

MySQL не дает ошибок, но результат не должен быть пустым.

+0

Вы уверены, что 'Подгруппу = '''' это не опечатка? –

+0

Да, это опечатка .. Ха-ха спасибо за редактирование. Я уже изменил значение SubGroup –

ответ

0

Ммм, эта версия кажется проще:

SELECT * 
FROM paytran 
WHERE StaffID LIKE '01%' AND 
     '2016-04-01' BETWEEN DateFrom AND DateTo AND 
     SubGroup = '1' AND 
     Week1 = '1' AND 
     DATE_FORMAT(PaymentMonth, '%Y%m') BETWEEN '201604' and '201612' AND 
     FO = 'F'; 

В общем, вам не нужно преобразовать даты, чтобы строки для сравнения. Если ожидается дата, то строка в формате YYYY-MM-DD будет преобразована автоматически.

+0

Но 201604 и 201612 фактически основаны на столбце базы данных, а 201604 - фактически 01/03/2016, а 201612 - фактически 31/12/2016. Команда также не работает. Hehe –

+0

@JohnsYong. , , Их нет в вашем вопросе. Конечно, вы все равно можете использовать 'date_format()', если хотите, в столбце базы данных. –

+0

В любом случае, большое спасибо за вашу помощь. Я очень ценю это –