表中有两列,分别为DateFrom
和DateTo
。
我想从这两个日期之间或之间获取行数据。例如如果我想从2018-12-27
到2019-01-10
取数据,则应返回两行,分别为HPID
1
和6
-因为这两行都位于或位于提到的日期。
现在我不知道SQL查询应该是什么。我尝试过BETWEEN
,但没有结果。
实际上,我正在使用小型酒店管理系统,该表显示了某些日期之间任何酒店的费用。因此,当用户搜索两个日期之间的日期的酒店时,应该显示与这些日期重叠的费用。
DateFrom和DateTo不是日期时间。
答案 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')