Desol
2018-10-08 11:36
采纳率: 50%
浏览 1.1k

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号吗?求解

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 四搭子咸鱼 2018-10-08 12:27

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

    打赏 评论
  • huwao 2018-10-09 01:01

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

    打赏 评论
  • 风子杨yxf771 2018-10-09 01:17

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

    打赏 评论
  • fish_dream 2018-10-09 03:21

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

    打赏 评论
  • 编程爱好者熊浪 2018-10-12 03:51

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

    打赏 评论

相关推荐 更多相似问题