代码之家  ›  专栏  ›  技术社区  ›  user3809240

检查列是否为varchar

  •  -2
  • user3809240  · 技术社区  · 10 年前

    当我在varchar和number中获取列名时,我写了一个查询。现在我想知道该列是否为varchar,那么我必须应用另一个条件,如果是number,则应用另一条件。例如:-

    Select employee_num,name from table;
    

    其中employee_num,name可以是任何数字/varchar。有规律的经验吗?

    我试过了

    select ..... where regexp_like(<column> , '^-?[0-9]*\.?[0-9]*$');
    

    但这行不通

    2 回复  |  直到 10 年前
        1
  •  0
  •   SQLChao    10 年前

    这是可行的

    -- 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

        2
  •  0
  •   Shekhar Sharma    10 年前

    我无法全面了解你的要求。如果您正在构建动态查询,并希望验证SELECT子句中列的数据类型,请根据您的访问级别/安全要求使用DBA_TAB_columns或ALL_TAB_COLUNS或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;