根据从和到日期从表中获取行

时间:2018-12-13 11:08:54

标签: mysql sql

我有一个表格,如下所示: enter image description here


表中有两列,分别为DateFromDateTo

我想从这两个日期之间或之间获取行数据。例如如果我想从2018-12-272019-01-10取数据,则应返回两行,分别为HPID 16-因为这两行都位于或位于提到的日期。

现在我不知道SQL查询应该是什么。我尝试过BETWEEN,但没有结果。

实际上,我正在使用小型酒店管理系统,该表显示了某些日期之间任何酒店的费用。因此,当用户搜索两个日期之间的日期的酒店时,应该显示与这些日期重叠的费用。

DateFrom和DateTo不是日期时间。

4 个答案:

答案 0 :(得分:0)

Stefan Taseki's answer几乎是正确的,但不能正确处理重叠部分。在该查询中交换开始日期和结束日期,它应该可以完成工作:

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

P.S。您应该始终将日期存储在datetime列中。日期不是文本。如果不这样做,您将遇到以下问题:a)排序,b)比较和c)以不同的格式显示日期。 datetime数据类型的存在是有充分理由的,您应该使用它。考虑现在就尽可能更改数据库。

P.P.S。您的数据也会被归一化。国家,城市,HotelName,HotelCode和HotelStar都应在单独的“酒店”表中(国家和城市也应在不同的表中),然后仅在此费用表中带有酒店ID的外键。否则,您将重复输入只能输入一次的数据。如果您没有意识到这一点,我建议您了解关系数据库的设计和规范化。

答案 1 :(得分:-1)

这应该有效:

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

答案 2 :(得分:-1)

首先请确保您的日期用单引号引起来

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

尚不清楚的是您要通过此查询实现的目标。

答案 3 :(得分:-1)

可能需要铸造,请在下面的查询中使用

select *from your_table_name 
where date(DateFrom) >= date('2018-11-27') AND date(DateTo) <= date('2019-01-10')