当前位置:  数据库>oracle

Oracle 小时显示问题

    来源: 互联网  发布时间:2017-03-23

    本文导语: select to_date('2010-1-29 0:00:01', 'yyyy-mm-dd hh24:mi:ss') from dual 显示结果:2010-1-29 上午 12:00:01 尽管在这里显示的结果不正确,但是在asp.net等其他程序中调用时仍然是正确的。 Oracle的一个bug? 目前没找到好的解决方法。 Oracle时间类型数...

select to_date('2010-1-29 0:00:01', 'yyyy-mm-dd hh24:mi:ss') from dual

显示结果:2010-1-29 上午 12:00:01

尽管在这里显示的结果不正确,但是在asp.net等其他程序中调用时仍然是正确的。

Oracle的一个bug? 目前没找到好的解决方法。

Oracle时间类型数据为0的bug

发组在数据迁移时,报告发现一些数值为'0000/00/00'的date数据,导致数据迁移失败。

这个问题有点奇怪,因为在Oracle中,date类型的数据的取值范围是从-4712/12/31到9999/12/31之间,并且年份不能为0。也就是说'0000/00/00'是一个非法数据,不为oracle所接受。

SQL> select to_date('0000-00-00', 'yyyy-mm-dd') from dual;
 
select to_date('0000-00-00', 'yyyy-mm-dd') from dual
 
ORA-01843: not a valid month
 
SQL> select to_date('0000-01-01', 'yyyy-mm-dd') from dual;
 
select to_date('0000-01-01', 'yyyy-mm-dd') from dual
 
ORA-01841: (full) year must be between -4713 and +9999, and not be 0

但为什么在数据中还是出现了'0000/00/00'呢?对此问题稍微研究了一下,发现oracle在date类型的数据问题上确实存在一些bug,通过一些特殊方法还是能使date类型存储'0000/00/00'数据。先看以下操作,这是bug之一。

SQL> select date '0000-01-01' from dual;
 
DATE'0000-01-01'
----------------
0/0/0000
 
SQL> select date '0000-11-22' from dual;
 
DATE'0000-11-22'
----------------
0/0/0000

在使用date关键字时,时间格式是罗马格式。此时,我们发现oracle没有对年份是否为0进行校验。并且,只要年份为0,数据都会被转变为'0000/00/00'。

再看另外一种情况,

SQL> select to_date('0001-01-01', 'yyyy-mm-dd')-365 from dual;
 
TO_DATE('0001-01-01','YYYY-MM-
------------------------------
0/0/0000
 
SQL> select to_date('0001-01-01', 'yyyy-mm-dd')-360 from dual;
 
TO_DATE('0001-01-01','YYYY-MM-
------------------------------
0/0/0000

可以看到,oracle对时间表达式的结果也没有校验年份是否为0,结合上面的bug,只要计算结果年份为0,无论月、日数值,结果都为'0000/00/00'。

再看第三种情况,就更加特殊了:只要对100到1500年之内的所有整百年的日期进行计算,如果结果为2月29的话,结果都为'0000/00/00'。

SQL> select date '0099-2-28' +1 from dual;
 
DATE'0099-2-28'+1
-----------------
3/1/0099
 
SQL> select date '0100-2-28' +1 from dual;
 
DATE'0100-2-28'+1
-----------------
0/0/0000
 
SQL> select date '1000-2-28' +1 from dual;
 
DATE'1000-2-28'+1
-----------------
0/0/0000
 
SQL> select date '1000-2-28' +2 from dual;
 
DATE'1000-2-28'+2
-----------------
3/1/1000
 
SQL> select date '1000-2-27' +2 from dual;
 
DATE'1000-2-27'+2
-----------------
0/0/0000
 
SQL> select date '1500-2-28' +1 from dual;
 
DATE'1500-2-28'+1
-----------------
0/0/0000
 
SQL> select date '1600-2-28' +1 from dual;
 
DATE'1600-2-28'+1
-----------------
2/29/1600

最后一种情况,如果日期表达式的结果小于0,结果都为'0000/00/00'。

SQL> select date '-0001-11-11' +1 from dual;
 
DATE'-0001-11-11'+1
-------------------
0/0/0000
 
SQL> select date '-4712-11-11' +15 from dual;
 
DATE'-4712-11-11'+15
--------------------
0/0/0000
 
SQL> select date '-1111-10-11' +0 from dual;
 
DATE'-1111-10-11'+0
-------------------
0/0/0000
 
SQL> select to_date('01/01/01', 'yyyy/mm/dd') - 900 from dual;
 
TO_DATE('01/01/01','YYYY/MM/DD
------------------------------
0/0/0000

顺便要说的是,以上结果不仅可以被查询出来,而且也能被存储在字段类型为date的表中。


    
 
 

您可能感兴趣的文章:

  • ■帮一个朋友维护网站,oracle运行半小时就自动锁死,用top发现是其狂吃内存,直到吃完为止。怎么办啊
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 在Red Hat Linux 9 和 Oracle 9.2 环境下,如何配制字符集,让Oracle能存入并显示日语里的假名?
  • 求助:oracle9在redhat9上安装好后,oracle管理工具会在菜单工具栏上显示吗?
  • 安装oracle9时,安装界面的字体无法正确显示,怎么解决啊???
  • Linux平台下Oracle9i数据库正确显示中文的设置
  • 求救:oracle9i在红帽子9上的安装字体显示不正常?
  • Oracle的大数据量查询结果显示问题。(高手帮忙)
  • 我用jbuilder调用oracle的数据库,但其中的中文显示的是乱码,怎么解决?
  • 在Oracle的SQLPLUS下显示CLOB中的内容
  • unix系统下安装oracle8i 怎样在window xp下显示啊
  • 如何让java application运行时不显示Dos窗口!象oracle,jb那样!
  • 急急急!用 jdbc取 oracle 中中文数据的显示问题?
  • 关于oracle日期显示的问题
  • 安装oracle9的时候字符无法显示??
  • 安装ORACLE时的安装界面显示一堆乱码如何解决(我很菜的,分100可再加)---在线
  • redhat linux 7.3下安装oracle8.17问题--安装界面上的文字显示小黑块
  • ****请教关于oracle中date型字段的显示问题。谢谢!!!**
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  • 高手相送,jsp连接oracle数据库后,显示数据为乱码?
  • 为什么unix下从oracle检索出来的中文显示的是?????? 呢?
  • oracle9i安装时.installer启动后,界面无法显示中文.
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 问一个简单的问题,我装了oracle 8.05,我并没有发有发现JDBC这个目录,是不是我要下载jdbc for oracle。
  • Linux下的Oracle安装问题(非常问题)
  • Oracle 10g中导出到Oracle 9的问题小结
  • oracle JDBC的问题
  • Suse linux使用oracle问题
  • 请教: Javaswing 和 Oracle JDBC thin 连接的问题
  • oracle版本问题
  • 关于oracle日期显示的问题 iis7站长之家
  • Javabeen+oracle的问题
  • 安装ORACLE的问题
  • 再问java 连接oracle 问题,急!
  • Oracle 监听内存泄露问题
  • Oracle乱码问题
  • oracle环境变量保存问题求教
  • Oracle高级官员回答Sun雇员的问题
  • 请问一个oracle的jdbc问题
  • Jsp连接Oracle的问题 ???
  • oracle的job不能运行问题的解决方法
  • 请教JSP与ORACLE连接问题。
  • JAVA连接ORACLE问题(100分)
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • oracle中如何把表中具有相同值列的多行数据合并成一行


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3