извлекать строки из таблицы на основе дат и дат - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть таблица, как показано здесь: enter image description here


В таблице есть два столбца с именами DateFrom и DateTo.

Я хочу получить данные строки из или между этими двумя датами.Например, если я хочу извлечь данные из 2018-12-27 в 2019-01-10, он должен вернуть две строки с HPID 1 и 6 - так как обе строки имеют или подпадают под указанные даты.

Теперь я не знаю, каким должен быть SQL-запрос.Я пробовал BETWEEN, но безрезультатно.

На самом деле я работаю над системой управления небольшим отелем, и в таблице указана стоимость любого отеля в определенные периоды.Поэтому, когда пользователь ищет отели для даты между двумя датами, он должен показывать затраты, которые перекрывают эти даты.

DateFrom и DateTo не являются datetime.

Ответы [ 4 ]

0 голосов
/ 13 декабря 2018

Ответ Стефана Тасеки почти верен, но неправильно обрабатывает перекрытия.Поменяйте местами даты начала и окончания в этом запросе, и он должен выполнить задание:

SELECT *
FROM [YourTable]
WHERE DateFrom <= '2019-01-10' AND DateTo >= '2018-12-27'

PS. Вы должны всегда хранить даты в datetime столбцах.Даты не являются текстовыми.У вас будут проблемы с: а) сортировкой, б) сравнением и в) представлением дат в разных форматах, если вы этого не сделаете.Тип данных datetime существует по уважительным причинам, вы должны его использовать.Рассмотрите возможность изменения базы данных сейчас, пока можете.

PPS Ваши данные также нормализованы.Страна, город, HotelName, HotelCode и HotelStar должны находиться в отдельной таблице «отель» (а страна и город должны быть в разных таблицах), а затем с внешним ключом на идентификаторе отеля только в этой таблице расходов.В противном случае вы продолжаете повторять данные, которые следует вводить только один раз.Я предлагаю вам узнать о дизайне и нормализации реляционных баз данных, если вы этого не понимали.

0 голосов
/ 13 декабря 2018

Прежде всего убедитесь, что ваши даты заключены в одинарные кавычки

'SELECT * FROM your_table WHERE DateFrom BETWEEN '2018-12-27' and '2019-01-10' OR DateTo BETWEEN '2018-12-27' and '2019-01-10';

Что-то неясное - это то, что вы пытаетесь достичь с помощью этого запроса.

0 голосов
/ 13 декабря 2018

Может потребоваться литье, используйте запрос ниже

select *from your_table_name 
where date(DateFrom) >= date('2018-11-27') AND date(DateTo) <= date('2019-01-10')
0 голосов
/ 13 декабря 2018

Это должно работать:

SELECT *
FROM [YourTable]
WHERE DateFrom >= '2018-12-27' AND DateTo<= 2019-01-10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...