Oracle中的ISDATE函数

时间:2014-03-10 23:05:48

标签: sql oracle plsql

我正在开发一个从Oracle DB获取数据的Web应用程序。 select语句是动态创建的。我想要做的是,每当我在表中选择一个日期字段时,它应该将它返回到格式为dd.mm.yyyy的字符串

我需要的是基本上有一种像isdate这样的函数的方法(COLUMN_NAME,true stmt,false stmt)

SELECT ISDATE(First Column, to_char(FirstColumn,'dd.mm.yyyy'), FistColumn)
  FROM ANYTABLE

有没有办法呢?

1 个答案:

答案 0 :(得分:2)

您可以使用数据字典检查该表的数据类型,并连接同一查询的多个版本以处理它可能的任何数据类型。

例如,假设你有这张表:

create table tbl_char (dt varchar2(10));
insert into tbl_char values ('01.03.2013');

然后跑了:

select to_char(dt, 'dd.mm.yyyy')
  from tbl_char
 where exists (select 'x'
          from all_tab_cols
         where table_name = 'TBL_CHAR'
           and column_name = 'DT'
           and data_type = 'DATE')
union all
select dt
  from tbl_char
 where exists (select 'x'
          from all_tab_cols
         where table_name = 'TBL_CHAR'
           and column_name = 'DT'
           and data_type = 'VARCHAR2')

您将获得一行“01.03.2013”​​作为输出,因为只有第二个查询实际运行。如果不是EXISTS子查询产生的过滤器,则第一个会返回错误。现在,如果我们要将varchar字段更改为日期,我们将获得完全相同的输出,只有结果在技术上来自第一个查询。第二个将运行并且不返回任何行。

sql fiddle:http://sqlfiddle.com/#!4/0001d/1/0