oracle 选择一段时间的内某一个时间点

在做一个酒店数据库的查询,输入了某房间入住时间3月12号以及离开的时间是4月12号,现在要求该房间3月26号的收入,
我写的是:
select sum(price) from room join booking on booking.hno = 'H001' where booking.datefrom > '26-MAR-1997'
and booking.dateto < '26-MAR-1997' 这样子得到的结果是null

![图片说明
!图片说明
通过入住日期和离开日期我们自己是可以知道客人3月26号也是在住的,但是如果不按照输入数据时的日期写,数据库就只会给出null,数据库是无法判断3月26号是不是属于3月12号到4月12号吗?求解

后面用27号,这个默认按0点算

数据库能判断出来日期的范围,但是这个不影响我们查询结果的吧;根据你的问题,我想应该是只需要25-26号的总收入结果,因此修改一下查询语句拿到结果就好。你也可以试着再之前查询结果的前提下再查询这次所需要的结果,但是双重查询也是一个结果,还是分开查询比较效率。

oracle中的date类型的字段,在用做条件时,最好还是用to_date函数,如:to_date('你的时间条件','yyyy-mm-dd hh24:mi:ss'),这样比较严谨。而且还可以将时间条件限定到秒。

booking.datefrom > '26-MAR-1997'
and booking.dateto < '26-MAR-1997'
这个条件不对,>= 试试

因该是你的price存在null或者空不为数字的值,先不要用count,看下数据是否存在空或者null如果存在,就使用 COUNT(CASE WHEN PRICE=NULL OR PRICE='' THEN 0 ELSE PRICE END),不过最好通过后面的条件排除price为空或者null的。