我正在开发一个从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
有没有办法呢?
答案 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