2015-11-10 2 views
1

Я работаю с программным обеспечением для путешествий, и мне нужно получить стоимость отеля в определенную дату. Даты проживания в отеле добавляются между тремя месяцами (с 09/01/2015 по 12/31/2015). В моей базе данных есть две даты начала и окончания столбцов, и оба типа varchar. Формат даты - mm/dd/yyyy. Мне нужно получить значение одной даты (11/25/2015). В настоящее время я использую следующий запрос:Получить значение даты от mysql php

SELECT * 
FROM tbl_roomtype 
where `room_id`='17' 
    and roomoccupancy='Double' 
    AND startdate<='11/25/2015' 
    and enddate >='11/25/2015' 

Запрос работает не так. Любой может предложить решение.

+3

Вы не сравниваете даты, вы сравниваете * строка * Это даст вам разные результаты Это то, что происходит, когда вы сохраняете ваши даты как строки.Теперь вам нужно преобразовать их в даты * сначала *, а затем провести сравнение. –

+0

_ «Запрос не работает отлично» _ Что ... Итак, он работает или не работает? в какой-то момент это датирует неправильные даты? – Epodax

+0

Поскольку вы сравниваете строки, вам лучше изменить формат до '2015/11/25', тогда' '2015/10/31' <'2015/11/25'' ** TRUE ** вместо '31/10/201 5 '<'25/11/2015'' ** FALSE ** :-) – Alex

ответ

2

Вам необходимо использовать str_to_date (str_to_date). Попробуйте это:

SELECT * 
FROM tbl_roomtype 
where `room_id`='17' 
    and roomoccupancy='Double' 
    AND STR_TO_DATE(startdate,'%m/%d/%Y')<=STR_TO_DATE('11/25/2015' ,'%m/%d/%Y') 
    and STR_TO_DATE(enddate,'%m/%d/%Y') >=STR_TO_DATE('11/25/2015' ,'%m/%d/%Y') 
+0

Спасибо за вашу помощь sir – mks

1

Вы должны проанализировать свои строки на действительную дату. Для фильтрации вам нужно использовать строку в формате «YYYY-MM-DD».

SELECT 
    * 
FROM 
    `tbl_roomtype` 
WHERE 
    `room_id` = '17' 
    AND `roomoccupancy` = 'Double' 
    AND STR_TO_DATE(`startdate`, '%m/%d/%Y') <= '2015-11-25' 
    AND STR_TO_DATE(`enddate`, '%m/%d/%Y') >= '2015-11-25' 

Или (если вы не смогли исправить фильтр:..

SELECT 
    * 
FROM 
    `tbl_roomtype` 
WHERE 
    `room_id` = '17' 
    AND `roomoccupancy` = 'Double' 
    AND STR_TO_DATE(`startdate`, '%m/%d/%Y') <= STR_TO_DATE('11/25/2015', '%m/%d/%Y') 
    AND STR_TO_DATE(`enddate`, '%m/%d/%Y') >= STR_TO_DATE('11/25/2015', '%m/%d/%Y') 
Смежные вопросы