检查Oracle中是否是“数字”函数
原文链接:https://www.jb51.cc/oracle/207329.html
我试图检查来自oracle(10g)查询中的列的值是否是一个数字,以便进行比较。就像是:
- select case when ( is_number(myTable.id) and (myTable.id >0) )
- then 'Is a number greater than 0'
- else 'it is not a number'
- end as valuetype
- from table myTable
有任何想法如何检查?
假设myTable中的ID列没有声明为NUMBER(这似乎是一个奇怪的选择,可能是有问题的),你可以写一个函数,试图将(可能是VARCHAR2)ID转换为一个数字,捕获异常,并返回“Y”或“N”。就像是
- CREATE OR REPLACE FUNCTION is_number( p_str IN VARCHAR2 )
- RETURN VARCHAR2 DETERMINISTIC ParaLLEL_ENABLE
- IS
- l_num NUMBER;
- BEGIN
- l_num := to_number( p_str );
- RETURN 'Y';
- EXCEPTION
- WHEN value_error THEN
- RETURN 'N';
- END is_number;
- SELECT (CASE WHEN is_number( myTable.id ) = 'Y' AND myTable.id > 0
- THEN 'Number > 0'
- ELSE 'Something else'
- END) some_alias
- FROM myTable
注意,虽然PL / sql有一个布尔数据类型,但sql不是。所以,虽然你可以声明一个函数返回一个布尔值,你不能在SQL查询中使用这样的函数。