当我在varchar和number.now中获取列名时,我已经写了一个查询。我想知道列是否是varchar然后我必须应用另一个条件并且在数字的情况下另一个条件。对于EG: -
Select employee_num,name from table;
其中employee_num,name可以是任何数字/ varchar。找到一个常规的exp?
我试过这个
select ..... where regexp_like(<column> , '^-?[0-9]*\.?[0-9]*$');
但这不起作用
答案 0 :(得分:0)
这有效
-- Not Numbers
SELECT * FROM t1
WHERE NOT REGEXP_LIKE(col1, '^\d+(\.\d+)?$', '');
-- Numbers
SELECT * FROM t1
WHERE REGEXP_LIKE(col1, '^\d+(\.\d+)?$', '')
答案 1 :(得分:0)
我无法全面了解您的要求。如果要构建动态查询并想要验证SELECT子句中列的数据类型,请根据您的访问级别/安全性要求使用DBA_TAB_COLUMNS或ALL_TAB_COLUMNS或USER_TAB_COLUMNS。这些是动态视图,提供有关属于表或视图的列以及数据类型的信息。
你可以写一个单独的函数,比如
function xx_get_data_type(
p_column_name in varchar2,
p_table_name in varchar2
) return varchar2
is
lv_return_data_type varchar2(30);
begin
select
data_type
into
lv_return_data_type
from
dba_tab_columns
where
table_name like p_table_name and column_name like p_column_name;
return(lv_return_data_type);
exception
when no_data_found then
<your error error handling code here...>
when others then
<your error handling code here...>
end;