检查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查询中使用这样的函数。
标签:
oracle数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2022-09-11 centos7系统的ping命令出现 www.baidu.com Name or service not known
2022-09-11 centos7 network-manager 与 interfaces 冲突 ,实际未成功,