<pre name="code" class="sql"><pre name="code" class="sql">create table test10 (set_date varchar2(10)); SQL> desc test10 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- SET_DATE VARCHAR2(10) SQL> select set_date,count(*) from test10 2 group by set_date 3 order by count(*); SET_DATE COUNT(*) ---------- ---------- 2012/08/47 1 20111259 1 2012/09/91 1 2013-08-37 1 2014-05-07 16384 2013-01-01 16384 2012/10/10 16384 20100809 16384 20110919 16384 已选择9行。 select a.set_date,to_date(set_date,'YYYY-MM-DD') from test10 a; 2013-01-01 01-1月 -13 20110919 19-9月 -11 SET_DATE TO_DATE(SET_DA ---------- -------------- 2014-05-07 07-5月 -14 20100809 09-8月 -10 2012/10/10 10-10月-12 2013-01-01 01-1月 -13 20110919 19-9月 -11 2014-05-07 07-5月 -14 20100809 09-8月 -10 2012/10/10 10-10月-12 2013-01-01 01-1月 -13 20110919 19-9月 -11 ERROR: ORA-01847: 月份中日的值必须介于 1 和当月最后一日之间 怎么找出不符合日期的天数呢? SQL> select a.set_date,substr(set_date,9,2) from test10 a where length(set_date)=10 and substr(set_date,9,2)>31 union select a.set_date,substr(set_date,7,2) from test10 a where length(set_date)=8 and substr(set_date,7,2)>31 2 3 4 5 6 7 8 9 ; SET_DATE SUBS ---------- ---- 20111259 59 2012/08/47 47 2012/09/91 91 2013-08-37 37 或者 select a.set_date,substr(set_date,7,2) from test10 a where substr(set_date,7,2) not like '%//%' escape '/' and substr(set_date,7,2) not like '%--%' escape '-' and substr(set_date,7,2)>31 union select a.set_date,substr(set_date,9,2) from test10 a where substr(set_date,9,2)>31