oracle to_date()比较的怪异问题

xiaolaugh 2014-08-06 10:39:23

select case when to_date('2013','yyyy')>to_date('20130701','yyyymmdd') then 'true' else 'false' end from dual
结果 true

select case when to_date('2013','yyyy')>to_date('20130801','yyyymmdd') then 'true' else 'false' end from dual
结果 false

有人知道原因不?
...全文
1062 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongshaoguo 2014-12-01
  • 打赏
  • 举报
回复
引用 3 楼 huangdh12 的回复:
我也以为是 每年的第一天, 现在 看来取的是年份以及 当前月的第一天啊。 的确觉得以前的更说得通。
本月第一天涨知识啊
ffshao 2014-11-29
  • 打赏
  • 举报
回复
引用 13 楼 ning_wnn2014 的回复:
楼主的两句代码我都运行了,都是TRUE,不是FALSE啊,楼主的FALSE怎么得来的? select to_date('2014','yyyy') from dual;获取的是当月的第一天,如下所示: 运行一下
哈哈,笑了,to_date('xxxx','yyyy')应该是取当前月第一天,to_date('xxxxyy','yyyyMM')应取yy月的第一天
bw555 2014-11-28
  • 打赏
  • 举报
回复
引用 13 楼 ning_wnn2014 的回复:
楼主的两句代码我都运行了,都是TRUE,不是FALSE啊,楼主的FALSE怎么得来的?
人家是8月发的帖子,测试时使用的7月8月 现在是11月,你应该用10月和11月测试
ning_wnn2014 2014-11-27
  • 打赏
  • 举报
回复
楼主的两句代码我都运行了,都是TRUE,不是FALSE啊,楼主的FALSE怎么得来的?
select to_date('2014','yyyy') from dual;获取的是当月的第一天,如下所示:

运行一下


不写代码的钦 2014-08-21
  • 打赏
  • 举报
回复
select case when to_date('2013','yyyy')=to_date('20130801','yyyymmdd') then 'true' else 'false' end from dual;
结果为true。这两个是相等的
宋哥 2014-08-12
  • 打赏
  • 举报
回复
问题本身不难,试一下就知道了,有点意思,不过程序里面还是明确说明比较好,默认值毕竟不可靠。
陈字文 2014-08-11
  • 打赏
  • 举报
回复
A fancy point~ 学习了。
huangdh12 2014-08-10
  • 打赏
  • 举报
回复
奇怪的是,年会去当前月, 月却不会取当前的天。

SQL> 
SQL> select to_date('2014','yyyy') from dual
  2  union all
  3  select to_date('201406','yyyymm') from dual
  4  ;
 
TO_DATE('2014','YYYY')
----------------------
2014/8/1
2014/6/1
 
SQL> 
yinan9 2014-08-08
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
[quote=引用 楼主 xiaolaugh 的回复:] select case when to_date('2013','yyyy')>to_date('20130701','yyyymmdd') then 'true' else 'false' end from dual 结果 true select case when to_date('2013','yyyy')>to_date('20130801','yyyymmdd') then 'true' else 'false' end from dual 结果 false 有人知道原因不?
select to_date('2013', 'yyyy') from dual;查询出来的结果为2013-08-01 to_date('2013','yyyy')>to_date('20130701','yyyymmdd')这个条件满足,所以为true, to_date('2013','yyyy')>to_date('20130801','yyyymmdd')这里结果为相等,所以结果为false. 如果改为to_date('2013','yyyy')>=to_date('20130801','yyyymmdd')结果就为true[/quote] 之前都以为是返回本年第一天,涨姿势了。
空心兜兜 2014-08-08
  • 打赏
  • 举报
回复
为什么要弄成这样?
sych888 2014-08-08
  • 打赏
  • 举报
回复
SQL> SELECT to_date('2013','yyyy'),to_date('20130701','yyyymmdd')FROM DUAL; TO_DATE('2013','YYY TO_DATE('20130701', ------------------- ------------------- 2013-08-01 00:00:00 2013-07-01 00:00:00
scutLiu 2014-08-08
  • 打赏
  • 举报
回复
默认值设定变了 长知识了
huangdh12 2014-08-06
  • 打赏
  • 举报
回复
引用 2 楼 bw555 的回复:
[quote=引用 1 楼 zlloct 的回复:] [quote=引用 楼主 xiaolaugh 的回复:] select case when to_date('2013','yyyy')>to_date('20130701','yyyymmdd') then 'true' else 'false' end from dual 结果 true select case when to_date('2013','yyyy')>to_date('20130801','yyyymmdd') then 'true' else 'false' end from dual 结果 false 有人知道原因不?
select to_date('2013', 'yyyy') from dual;查询出来的结果为2013-08-01 to_date('2013','yyyy')>to_date('20130701','yyyymmdd')这个条件满足,所以为true, to_date('2013','yyyy')>to_date('20130801','yyyymmdd')这里结果为相等,所以结果为false. 如果改为to_date('2013','yyyy')>=to_date('20130801','yyyymmdd')结果就为true[/quote] 正解,我记得早期版本返回的是本年的第一天,始终不知道为啥要改成现在这样[/quote] 我也以为是 每年的第一天, 现在 看来取的是年份以及 当前月的第一天啊。 的确觉得以前的更说得通。
bw555 2014-08-06
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
[quote=引用 楼主 xiaolaugh 的回复:] select case when to_date('2013','yyyy')>to_date('20130701','yyyymmdd') then 'true' else 'false' end from dual 结果 true select case when to_date('2013','yyyy')>to_date('20130801','yyyymmdd') then 'true' else 'false' end from dual 结果 false 有人知道原因不?
select to_date('2013', 'yyyy') from dual;查询出来的结果为2013-08-01 to_date('2013','yyyy')>to_date('20130701','yyyymmdd')这个条件满足,所以为true, to_date('2013','yyyy')>to_date('20130801','yyyymmdd')这里结果为相等,所以结果为false. 如果改为to_date('2013','yyyy')>=to_date('20130801','yyyymmdd')结果就为true[/quote] 正解,我记得早期版本返回的是本年的第一天,始终不知道为啥要改成现在这样
CT_LXL 2014-08-06
  • 打赏
  • 举报
回复
引用 楼主 xiaolaugh 的回复:
select case when to_date('2013','yyyy')>to_date('20130701','yyyymmdd') then 'true' else 'false' end from dual 结果 true select case when to_date('2013','yyyy')>to_date('20130801','yyyymmdd') then 'true' else 'false' end from dual 结果 false 有人知道原因不?
select to_date('2013', 'yyyy') from dual;查询出来的结果为2013-08-01 to_date('2013','yyyy')>to_date('20130701','yyyymmdd')这个条件满足,所以为true, to_date('2013','yyyy')>to_date('20130801','yyyymmdd')这里结果为相等,所以结果为false. 如果改为to_date('2013','yyyy')>=to_date('20130801','yyyymmdd')结果就为true

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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