between函数可以用于字符串的比较吗?

NetShape 2008-07-14 02:11:23
select * from tables where to_char(a.creationdate,'yyyy-mm-dd') between '2008-01-01' and '2008-07-31'
感觉beteen应该是用来比较有大小的字段,难道这个是比较ASCII码?这样的句话查出来的结果是满足createiondate在'2008-01-01' 到'2008-07-31'
之间数据吗?晕了。
...全文
1830 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaozhu_Man 2011-11-04
  • 打赏
  • 举报
回复
学习了额学习了。。
allanmorgan 2008-07-14
  • 打赏
  • 举报
回复
两句话效果一样,但如果你的表里 creationdate字段有索引的话,最好用to_date,如果用to_char的话索引就用不上了。关于日期的比较和字符的比较 同意3楼的分析。
dbcxbj 2008-07-14
  • 打赏
  • 举报
回复
select * from tables where to_char(a.creationdate,'yyyy-mm-dd') between '2008-01-01' and '2008-07-31' 

这个也对,效果其实都是一样的
如果硬是论效率的话
应该是to_char()的那个效率高,毕竟是转换了一次,而to_date()转换了两次
oracledbalgtu 2008-07-14
  • 打赏
  • 举报
回复
你写的那个效率高,因为日期的比较和字符的比较不一样。日期2008.1.31之后是2008.2.1,字符比较就不是这样了。。。。
此外对col使用函数还影响查询效率。即便是有函数index,还有不如不使用函数的好。

看来你比他有才。呵呵

[Quote=引用 2 楼 NetShape 的回复:]
是的,我一直觉的这样写select * from tables where creationdate between to_date('2008-01-01','yyyy-mm-dd') and to_date('2008-07-31','yyyy-mm-dd')
可是今天有一个开发,这样写
select * from tables where to_char(a.creationdate,'yyyy-mm-dd') between '2008-01-01' and '2008-07-31'
这两句是相等的吗?性能上会有差异吗?总感觉用to_char挺奇怪的。可能是我见的少了。有哪位大哥可以解答下,这两种方式是不是相…
[/Quote]
NetShape 2008-07-14
  • 打赏
  • 举报
回复
是的,我一直觉的这样写select * from tables where creationdate between to_date('2008-01-01','yyyy-mm-dd') and to_date('2008-07-31','yyyy-mm-dd')
可是今天有一个开发,这样写
select * from tables where to_char(a.creationdate,'yyyy-mm-dd') between '2008-01-01' and '2008-07-31'
这两句是相等的吗?性能上会有差异吗?总感觉用to_char挺奇怪的。可能是我见的少了。有哪位大哥可以解答下,这两种方式是不是相等的。creationdate是date类型的。
dbcxbj 2008-07-14
  • 打赏
  • 举报
回复
可以这样写啊
select * from tables where creationdate between to_date('2008-01-01','yyyy-mm-dd') and to_date('2008-07-31','yyyy-mm-dd')

17,090

社区成员

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

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