如何检查字段是字符还是数字?

时间:2013-06-01 05:45:31

标签: sql oracle plsql

我的桌子上有一个NVARCHAR字段。 (使用Oracle 11g)

我想检查它是否有char数据或数字数据。

帮我写一个选择查询。 (使用PL-SQL)

我想我可以用case编写它,但我无法实现它。 (我没有检查isChar和isNumber的方法)

select
       case <myField>
           when <isChar> then
               <this is a char data>
           when <IsNum> then
               <this is number data>
       End
from <myTable>

2 个答案:

答案 0 :(得分:3)

使用REGEXP_LIKE

SELECT t.*,
       CASE 
         WHEN REGEXP_LIKE(column1, '^[0-9]+$') THEN 'Numeric' 
         ELSE 'Char' 
       END data_type 
  FROM table1 t;

没有它

SELECT t.*,
       CASE 
         WHEN LENGTH(TRIM(TRANSLATE (column1, '0123456789',' ')))  IS NULL THEN 'Numeric' 
         ELSE 'Char' 
       END data_type 
  FROM table1 t;

这是 SQLFiddle 演示

如果需要,可以调整两个版本以适应期间,加号和减号

更新正如@tbone正确评论这些查询不会考虑NULL并且当column1的值为{{时,分别将'Char'和'Numeric'作为data_type返回1}}。

至少有两种选择如何处理它:

首先如果我们对它们不感兴趣,只需过滤出NULL个值的行

NULL

第二次... WHERE column1 IS NOT NULL

中引入NULL(显然可以是“N / A”或其他内容)数据类型
CASE

此处已更新 SQLFiddle 演示

答案 1 :(得分:1)

试试这个SQL。我假设在case语句中有字符数据。

 select case <myField>
        when (ascii(char)>=65 and ascii(char)<=90) OR (ascii(char)>=97 and ascii(char)<=122)  
        then
                   <this is a char data>
        when ascii(char)>=48 and ascii(char)<=57 
        then
                   <this is number data>
        End
 from <myTable>

希望这有帮助。