根据开始日期和结束日期从表中获取行

nnt7mjpx  于 2021-06-17  发布在  Mysql
关注(0)|答案(4)|浏览(394)

我有一张table,如下所示:

表中有两列名为 DateFrom 以及 DateTo .
我想从这两个日期或这两个日期之间获取行数据。e、 如果我想从 2018-12-272019-01-10 它应该返回两行
HPID 1 以及 6 -因为两行都在上述日期之内。
现在我不知道sql查询应该是什么。我试过了 BETWEEN 但没有结果。
实际上,我正在开发一个小型酒店管理系统,表格显示了特定日期之间任何酒店的成本。因此,当用户搜索两个日期之间的日期酒店时,应该显示与这些日期重叠的成本。
datefrom和dateto不是datetime。

1mrurvl1

1mrurvl11#

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

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

dgenwo3n2#

首先确保你的日期是单引号

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

有一点不清楚,那就是您试图通过这个查询实现什么。

s6fujrry

s6fujrry3#

这应该起作用:

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

l3zydbqr4#

stefan taseki的回答几乎是正确的,但没有正确处理重叠。交换查询中的开始日期和结束日期,它应该完成以下工作:

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

p、 你应该把你的日期储存在 datetime 柱。日期不是文本。如果你不这样做,你会在a)排序,b)比较,和c)以不同的格式呈现日期上遇到问题。这个 datetime 数据类型存在有充分的理由,您应该使用它。现在可以考虑更改数据库。
p、 另外,你的数据也是非标准化的。country、city、hotelname、hotelcode和hotelstar都应位于单独的“hotel”表中(country和city也应位于不同的表中),然后仅在此costs表中的hotel id上使用外键。否则,您将不断重复只应输入一次的数据。如果您没有意识到这一点,我建议您学习关系数据库设计和规范化。

相关问题