检查列是否为varchar

时间:2014-07-10 17:28:06

标签: sql regex plsqldeveloper

当我在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]*$');

但这不起作用

2 个答案:

答案 0 :(得分:0)

这有效

-- Not Numbers
SELECT * FROM t1
WHERE NOT REGEXP_LIKE(col1, '^\d+(\.\d+)?$', '');

-- Numbers
SELECT * FROM t1
WHERE REGEXP_LIKE(col1, '^\d+(\.\d+)?$', '') 

Link to SQL Fiddle Example

答案 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;