比方 select person_num from PERSON ,如果 person_num 是number型的字段,
那么自动把这句sql 替换成 select to_char(person_num) from PERSON.
因为我们改造的这个jsp/j2ee项目,查询数据库用的是proC写的服务,但是现成的服务不支持number型。所以只能把sql
替换之后传给服务, 我们现在的做法是人工查看字段类型,人工替换sql,实在太费劲了,而服务没办法改。 需要改造的地方有三点: 1.无精度number型直接to_char。
2.有精度number型,用to_char(xxx,'9999,99')
3.date型用to_char(xxx,'yyyymmdd HH24:MI:SS')
能不能做到我把 sql 从页面提出来 ,程序自动给我分析,自动帮我替换,而不用我手动去查字段类型了
那么自动把这句sql 替换成 select to_char(person_num) from PERSON.
因为我们改造的这个jsp/j2ee项目,查询数据库用的是proC写的服务,但是现成的服务不支持number型。所以只能把sql
替换之后传给服务, 我们现在的做法是人工查看字段类型,人工替换sql,实在太费劲了,而服务没办法改。 需要改造的地方有三点: 1.无精度number型直接to_char。
2.有精度number型,用to_char(xxx,'9999,99')
3.date型用to_char(xxx,'yyyymmdd HH24:MI:SS')
能不能做到我把 sql 从页面提出来 ,程序自动给我分析,自动帮我替换,而不用我手动去查字段类型了
有精度无精度是什么意思,直接to_char()都一样的吧?
select case when length(person_num)-length(replace(person_num,'-','')=2
then to_char(person_num,'yyyymmdd HH24:MI:SS')
else to_char(person_num)end person_num from PERSON
这个语句要保证,如果person_num为字符型,里面不会包括两个'-'。若根本没有包含'-',更好办
select case when instr(person_num,'-')>0
then to_char(person_num,'yyyymmdd HH24:MI:SS')
else to_char(person_num)end person_num from PERSON
如果精度也要区分,就不好办了
可以用下列语句试试,不过效率可能不高
select case (select data_type from user_tab_cols where table_name='PERSON' and column_name='PERSON_NUM')
when 'NUMBER' then to_char(person_num)
when 'date' then to_char(person_num,'yyyymmdd HH24:MI:SS')
when ... end person_num from person
判断太多太冗余,因为每个列的所有记录的类型必定都一样
你可以将select data_type from user_tab_cols where table_name='PERSON' and column_name='PERSON_NUM'提取出来,自动判断类型后
决定执行select person_num from...
还是select to_char(person_num,..) from
还是...
有精度无精度是什么意思,直接to_char()都一样的吧?
select case when length(person_num)-length(replace(person_num,'-','')=2
then to_char(person_num,'yyyymmdd HH24:MI:SS')
else to_char(person_num)end person_num from PERSON
这个语句要保证,如果person_num为字符型,里面不会包括两个'-'。若根本没有包含'-',更好办
select case when instr(person_num,'-')>0
then to_char(person_num,'yyyymmdd HH24:MI:SS')
else to_char(person_num)end person_num from PERSON
如果精度也要区分,就不好办了
可以用下列语句试试,不过效率可能不高
select case (select data_type from user_tab_cols where table_name='PERSON' and column_name='PERSON_NUM')
when 'NUMBER' then to_char(person_num)
when 'date' then to_char(person_num,'yyyymmdd HH24:MI:SS')
when ... end person_num from person
判断太多太冗余,因为每个列的所有记录的类型必定都一样
你可以将select data_type from user_tab_cols where table_name='PERSON' and column_name='PERSON_NUM'提取出来,自动判断类型后
决定执行select person_num from...
还是select to_char(person_num,..) from
还是...