2010-04-15 2 views
4

Я хочу проверить, существует ли дата между датой начала и датой окончания.Дата наступления даты начала и окончания даты

я добавил, где положение

where datepaid between '2010-04-01' AND '2010-04-15' 

, но проблема в том, что она исключает «2010-04-15».

Он должен включать дату окончания также как я могу это сделать?

Пожалуйста, помогите мне в этом

С уважением,

Панкай

ответ

14

Укажите время части явно:

WHERE datepaid BETWEEN '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' 
+0

включает ли он как 2010-04-15 23: 59: 59.56? –

+1

@Jens: Насколько я знаю, MySQL не хранит дробные секунды. Если он поддерживает их, я бы изменил предложение на что-то вроде BETWEEN 2010-04-01 00: 00: 00.000 'AND' 2010-04-15 23: 59: 59.999'' вместо этого. – LukeH

5

Возможно, ваши даты включают время внутридневных. Попробуйте вместо этого:

where '2010-04-01' <= datepaid AND datepaid < '2010-04-16' 
+1

привет спасибо за ответ, что означает, что я должен добавить 1 день интервал в конец даты, чтобы получить правильную запись –

0

попробовать

where datepaid between '2010-04-01' AND '2010-04-15 23:59:59' 
+2

Мне нравится, что так много людей держали свои аватары единорога! –

-1

добавить этот пункт:

OR datepaid = '2010-04-15' 
+0

Это ничего не сделает. Предложение 'BETWEEN' уже охватывает этот случай. –

1
WHERE datepaid >= '2010-04-01' 
     AND datepaid < '2010-04-15' + INTERVAL 1 DAY 
0

Это, вероятно, связано с датами, имеющими время:

select 
    '2010-04-15' between '2010-04-01' AND '2010-04-15', -- 1 
    '2010-04-15 12:00:00' between '2010-04-01' AND '2010-04-15', -- 0 
    '2010-04-15 12:00:00' between '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' -- 1 

Либо добавить время в диапазоне разделителей или усечение значения перед сравнением:

select 
    '2010-04-15 12:00:00' between '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' -- 1 
    cast('2010-04-15 12:00:00' as date) between '2010-04-01' AND '2010-04-15' -- 1 

Я не проверял, но я полагаю, производительность лучше без литья.

0

где CONVERT (VARCHAR (10), datepaid, 23) между '2010-04-01' и '2010-04-15'

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