oracle日期字段为varchar2类型,为什么能直接比较

Jhaker 2016-01-13 10:45:56
加精
像这样查询select * from BUDGET_LOGIN_LOG where OPTTIME BETWEEN '2015-06-15' and '2015-06-16 ';能得到正确的结果集
...全文
8949 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixingworkCCC 2017-11-23
  • 打赏
  • 举报
回复
你的字段类型就是varchar2 类型为什么不能那样查呢。
yeelbo 2017-11-14
  • 打赏
  • 举报
回复
学习了解一下
有意1314 2017-07-05
  • 打赏
  • 举报
回复
字符串的比较顺序是先比较第一个字符,然后第二个,一次类推 因此如果你的字段格式严格依照特定格式(包括位数一致),就可以用字符串直接比较
ACE-2017 2017-06-22
  • 打赏
  • 举报
回复
因为OPTTIME是varchar2类型,所以,可以直接比较,不需要进行什么类型转换。如果要查2015年全年的数据,都可以用下面的比较方式。OPTTIME BETWEEN '2015' and '2016'
imcmuc 2017-04-26
  • 打赏
  • 举报
回复
和java里的比较规则相似
雨巷啊 2017-04-26
  • 打赏
  • 举报
回复
字符串是可以比较的,会一个一个字符比较大小,如果日期串长度格式都是固定是可以得到想要的结果。
qq_28538637 2017-04-26
  • 打赏
  • 举报
回复
因为你格式一样,而且都是varchar2类型。字符当然可以比较了。
世纪大烧饼 2017-04-26
  • 打赏
  • 举报
回复
感谢分享,学习了!
AHUA1001 2016-07-19
  • 打赏
  • 举报
回复
当做字符比较,本质上就是字符。
萧逸才 2016-06-15
  • 打赏
  • 举报
回复
字符串本来就可以比较,不过是一对一的比
xiang_code 2016-03-20
  • 打赏
  • 举报
回复
还是转换一下比较放心
ls_rose 2016-03-16
  • 打赏
  • 举报
回复
日期型,varchar,数字型都是隐式转换
qq_22934047 2016-03-16
  • 打赏
  • 举报
回复
代码里面是不推荐这种写法的
kingkingzhu 2016-03-15
  • 打赏
  • 举报
回复
引用 23 楼 jdsnhan 的回复:
[quote=引用 8 楼 kingkingzhu 的回复:] 那是你运气好 oracle本身会有隐式转型 刚好转的能匹配 不要纠结这种问题 代码里面是不推荐这种写法的
其实并没有做类型转换。你定义的是varchar2,只不过赋予它的意义代表日期, 事实上并不是日期类型。 至于字符串比较,楼上诸位已经分析的很透彻了。 你可以用两种方式测试并体会: 1、 BETWEEN '2015-07-15' and '2015-6-16 ' 看看谁大谁小 2、 BETWEEN date'2015-07-15' and date'2015-6-16 ' 再看谁大谁小 [/quote] 看错了 以为OPTTIME 是date型
xiumuzi003 2016-03-14
  • 打赏
  • 举报
回复
learning
qq_34284413 2016-03-14
  • 打赏
  • 举报
回复
顶!不要沉下去!
jdsnhan 2016-03-14
  • 打赏
  • 举报
回复
引用 8 楼 kingkingzhu 的回复:
那是你运气好 oracle本身会有隐式转型 刚好转的能匹配 不要纠结这种问题 代码里面是不推荐这种写法的
其实并没有做类型转换。你定义的是varchar2,只不过赋予它的意义代表日期, 事实上并不是日期类型。 至于字符串比较,楼上诸位已经分析的很透彻了。 你可以用两种方式测试并体会: 1、 BETWEEN '2015-07-15' and '2015-6-16 ' 看看谁大谁小 2、 BETWEEN date'2015-07-15' and date'2015-6-16 ' 再看谁大谁小
东方淄墨 2016-03-11
  • 打赏
  • 举报
回复
oracle中的字符串比较和java中字符串的比较规则是一样的。都是按照位数一个一个对应比较。所以在以一统一格式的日期下,是可以正常比较出大小的
bo871747022 2016-03-11
  • 打赏
  • 举报
回复
这个和日期没关系,你定义的是varchar2,你以为它是日期,但是数据库是根据定义的varchar2识别的它就会只认字符串,而正好字符串的比较规则类似于日期的符合规则.就是先比较第一个字符,若相同,则比较下一个,一直到不同为止.
卖水果的net 2016-03-10
  • 打赏
  • 举报
回复
你的数据具体上怎么存的?除了日期之外,还有时间吗? 再看看有没有多余的空格这些。
加载更多回复(13)

17,078

社区成员

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

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