首页 > 代码库 > ORA-01843: 无效的月份

ORA-01843: 无效的月份

昨天写程序,碰到要判断oracle中以varchar2存储的日期,表结构如下:

create table CDSGUS(  name      VARCHAR2(2000),  cardno    VARCHAR2(2000),  descriot  VARCHAR2(2000),  ctftp     VARCHAR2(2000),  ctfid     VARCHAR2(2000),  gender    VARCHAR2(2000),  birthday  VARCHAR2(2000),  address   VARCHAR2(2000),  zip       VARCHAR2(2000),  dirty     VARCHAR2(2000),  district1 VARCHAR2(2000),  district2 VARCHAR2(2000),  district3 VARCHAR2(2000),  district4 VARCHAR2(2000),  district5 VARCHAR2(2000),  district6 VARCHAR2(2000),  firstnm   VARCHAR2(2000),  lastnm    VARCHAR2(2000),  duty      VARCHAR2(2000),  mobile    VARCHAR2(2000),  tel       VARCHAR2(2000),  fax       VARCHAR2(2000),  email     VARCHAR2(2000),  nation    VARCHAR2(2000),  taste     VARCHAR2(2000),  education VARCHAR2(2000),  company   VARCHAR2(2000),  ctel      VARCHAR2(2000),  caddress  VARCHAR2(2000),  czip      VARCHAR2(2000),  family    VARCHAR2(2000),  version   VARCHAR2(2000),  id        NUMBER(10) not null)

这是网上泄露的所谓开房信息数据库,闲来没事想做个程序,可是执行SQL语句时让人很郁闷:

1.

select * from cdsgus where to_date(birthday,yyyymmdd)<to_date(19880901,yyyymmdd);

2.

select * from cdsgus where to_date(birthday,yyyyMMdd)>to_date(19880901,yyyyMMdd);

执行1.时没有问题:

执行2.时却出现问题:

很是费解。

这不算什么,还有让我更纳闷的,因为3.可以执行成功:

3.

select * from cdsgus where to_date(birthday,yyyyMMdd)>to_date(19880801,yyyyMMdd);

问题就是这样的。网上没找到原因,昨天弄到两点,以我的失败告终。

有知道原因的希望指点一下(不是M大小写的原因)。

ORA-01843: 无效的月份