一道题, 有一定难度
如何查询出一个字段中是日期格式的数
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'12345');
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'12A45');
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'12');
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'ABCE');
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'A234');
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'1998-02-02');
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'-02-02');
INSERT INTO W_YJTABLE(WID,WNAME) VALUES(W_YJTABLE_SEQ.nextval,'中');如查询出数据'1998-02-02'

解决方案 »

  1.   

      加个条件判断就OK: (以下语句应该河以查询出你需要的结果)  
    select * from W_YJTABLE where to_date(WNAME,'YYYY.MM.DD') Between to_date('1900.01.01','YYYY.MM.DD') and to_date('2099.12.31','YYYY.MM.DD')
      

  2.   


    select WNAME from W_YJTABLE WHERE WNAME LIKE '____-__-__';
      

  3.   

    select * from W_YJTABLE where WNAME='1998-02-02'
    完成。。给分
      

  4.   

    啊。。没看清题目。。还以为是找1998-02-02引用下
    select WNAME from W_YJTABLE WHERE WNAME LIKE '____-__-__';
      

  5.   

    如果是正确的日期格式我写的是可以的要是abcd-ef-gh就不行了
    还有一种方法是写个函数把字段传进去,to_date一下
    正确返回个数比如说1不正确返回0然后select都是1的就哦了。
      

  6.   

    楼主可以试一下以下的语句:
    select wname from w_yjtable where regexp_like(wname,'^[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}$');该SQL语句能检测出WNAME的格式为:yyyy-mm-dd    /    yyyy-mm-d        /  yyyy-m-d     /  yyyy-m-dd的所有数据.
      

  7.   

    select wname from w_yjtable where regexp_like(wname,'^[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}$');
    报错,看来大家都没想到我是想写一个自定义函数 像Oracle中IsDate函数功能一样
      

  8.   

    在Oracle 9i中,对正则表达式的支持不是很好. 但是在Oracle 10g中被解决了. ORACLE 10g中内建了符合POSIX标准的正则表达式,可以很方便使用正则表达式进行运算. 请看下例:SQL> drop table dinya_01;表已删除。SQL> create table dinya_01 (s_value varchar2(300));表已创建。SQL> insert into dinya_01 values('123445');已创建 1 行。SQL> insert into dinya_01 values('12A45');已创建 1 行。SQL> insert into dinya_01 values('12');已创建 1 行。SQL> insert into dinya_01 values('ABCE');已创建 1 行。SQL> insert into dinya_01 values('A234');已创建 1 行。SQL> insert into dinya_01 values('1998-02-02');已创建 1 行。SQL> insert into dinya_01 values('1-02-02');已创建 1 行。SQL> insert into dinya_01 values('中国');已创建 1 行。SQL> insert into dinya_01 values('1998-2-2');已创建 1 行。SQL> insert into dinya_01 values('98-2-2');已创建 1 行。SQL> commit;提交完成。SQL> 
    SQL> select * from dinya_01 a where REGEXP_LIKE(a.s_value,'^\d{2,4}-\d{1,2}-\d{1,2}$')
      2  /S_VALUE
    --------------------------------------------------------------------------------
    1998-02-02
    1998-2-2
    98-2-2SQL> ---我想, 如果是10g数据库的话, 这应该可以满足你的查询需求了. 
      

  9.   

    楼上有一位写了    like '____-__-__',  这个查询出来的不仅仅是日期, aaaa-bb-dd  , 这个字符串也会被查询出来的. 而且, 对 '2005-9-08' 这样的字符串就无能为力了.