oracle 介于日期之间_Oracle日期“介于”查询

从您的输出来看,您似乎已经将开始日期定义为时间戳。如果是固定日期,Oracle将能够处理隐式转换。但事实并非如此,您需要显式地将这些字符串转换为日期。

SQL> alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'

2 /

Session altered.

SQL>

SQL> select * from t23

2 where start_date between '15-JAN-10' and '17-JAN-10'

3 /

no rows selected

SQL> select * from t23

2 where start_date between to_date('15-JAN-10') and to_date('17-JAN-10')

3 /

WIDGET START_DATE

------------------------------ ----------------------

Small Widget 15-JAN-10 04.25.32.000

SQL>

但我们还是只有一排。这是因为开始日期有一个时间元素。如果我们不指定时间组件,Oracle会将其默认为午夜。这对

侧边

BETWEEN

但不是为了

直到

侧面:

SQL> select * from t23

2 where start_date between to_date('15-JAN-10')

3 and to_date('17-JAN-10 23:59:59')

4 /

WIDGET START_DATE

------------------------------ ----------------------

Small Widget 15-JAN-10 04.25.32.000

Product 1 17-JAN-10 04.31.32.000

SQL>

编辑

如果您不能传递时间组件,那么有两个选择。一种方法是更改WHERE子句以从条件中删除时间元素:

where trunc(start_date) between to_date('15-JAN-10')

and to_date('17-JAN-10')

这可能会影响性能,因为它会在开始日期取消任何B树索引的资格。您将需要构建一个基于函数的索引。

或者,您可以将时间元素添加到代码中的日期中:

where start_date between to_date('15-JAN-10')

and to_date('17-JAN-10') + (86399/86400)

由于这些问题,许多人宁愿避免使用

between

通过检查这样的日期边界:

where start_date >= to_date('15-JAN-10')

and start_date < to_date('18-JAN-10')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值