PL/SQL两个日期类型直接比较的问题。

willswang2003 2004-10-07 04:17:41
在存储过程中有两个参数date1 Date,date2 Date
select * from table1 where start_date>=date1 and start_date<=date2;
start_date字段为Date类型,
发现一个奇怪的问题,在PLSQL Developer中测试这个存储过程,输入参数date1:2004-9-1,date2:2004-9-30,发现start_date为2004-9-30的记录没有查询到,改成
select * from table1 where to_char(start_date,'yyyy-mm-dd')>=to_char(date1,'yyyy-mm-dd') and to_char(start_date,'yyyy-mm-dd')<=to_char(date2,'yyyy-mm-dd')就没有问题,
虽然问题解决的,但是为什么会有第一种情况出现?

希望高手能解答!谢谢
...全文
1860 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
willswang2003 2004-10-12
  • 打赏
  • 举报
回复
谢谢sunzhikai1978() ,"2004-9-30 "系统默认为 "2004-9-30 00:00:00 ",
问题的关键就是这个。给分
liuyi8903 2004-10-08
  • 打赏
  • 举报
回复
上面的已经很清楚了。另外要注意日期格式的精度的处理。
看你的日期字段精度的程度了。
sunzhikai1978 2004-10-08
  • 打赏
  • 举报
回复
如果date2为Date类型,那么"2004-9-30"系统默认为"2004-9-30 00:00:00",所以2004-9-30以后的记录当然查不到了,to_char(date2,'yyyy-mm-dd')相当于指定了精度,将date2只精确到天。举个例子:
如果date2="2004-9-30 08:40:00",则to_char(date2,'yyyy-mm-dd')="2004-9-30",故不管后面的时间是多少,2004-9-30这一天的记录都能查得到。
zwj0712 2004-10-08
  • 打赏
  • 举报
回复
tranc()函数啊,选择日期字段精度!
kinggom 2004-10-07
  • 打赏
  • 举报
回复
trunc()
mistyliu 2004-10-07
  • 打赏
  • 举报
回复
to_date()
beckhambobo 2004-10-07
  • 打赏
  • 举报
回复
select * from table1 where trunc(start_date)>=date1 and trunc(start_date)<=date2;
waxle 2004-10-07
  • 打赏
  • 举报
回复
不过你也可以把参数转换成日期型进行比较 to_date('2004-09-30','yyyy-mm-dd') 也是可以的。
dinya2003 2004-10-07
  • 打赏
  • 举报
回复
输入参数date1:2004-9-1

--这个参数是字符型的,要在输入的时候进行转换: to_date('2004-9-1','yyyy-mm-dd')

而后一种都把日期类型转换成了字符型.一样的格式,所以可以.
willswang2003 2004-10-07
  • 打赏
  • 举报
回复
自己up

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧