Sql 在Oracle中是否有与TRY_CONVERT()等效的工具?
如果转换成功,T-SQL中的TRY_CONVERT()将返回转换为指定数据类型的值;否则它将返回NULL ORACLE中是否有类似的功能或重现这种行为的方法 从12.2版开始,您可以使用Sql 在Oracle中是否有与TRY_CONVERT()等效的工具?,sql,oracle,plsql,Sql,Oracle,Plsql,如果转换成功,T-SQL中的TRY_CONVERT()将返回转换为指定数据类型的值;否则它将返回NULL ORACLE中是否有类似的功能或重现这种行为的方法 从12.2版开始,您可以使用cast(…转换错误时默认为NULL) 完整示例: 从dual中选择cast('ABC'作为数字,转换错误时默认为空) 您引用了Oracle PL/SQL,因此可以尝试在用户定义的函数中包含异常块。这将适用于Oracle的11.2版本 DECLARE nTest NUMBER; BEGIN
cast(…转换错误时默认为NULL)
完整示例:
从dual中选择cast('ABC'作为数字,转换错误时默认为空)
您引用了Oracle PL/SQL,因此可以尝试在用户定义的函数中包含异常块。这将适用于Oracle的11.2版本
DECLARE
nTest NUMBER;
BEGIN
nTest := CAST ('ABC' AS NUMBER);
EXCEPTION WHEN VALUE_ERROR THEN
nTest := NULL;
END;
如果您不在Oracle 12.2上,可以在强制转换之前使用正则表达式确定该值是否有效。对于整数(在数学意义上,表示可选符号,然后是一个或多个数字): 这与Oracle 12.2的默认空值转换错误相同
对于整数以外的值,同样的方法也适用,但正则表达式变得更难。谢谢您的回答。不幸的是,这对我来说不起作用,因为我使用的是Oracle的11.2版本。谢谢,这解决了我的问题,只是我必须从正则表达式中删除“\”,否则我会得到一个错误ORA-12728-“正则表达式中的无效范围”,很高兴它起到了作用,谢谢你让我知道反斜杠-我在那里搞错了。我已经确定了答案。
SELECT
CASE WHEN REGEXP_LIKE(col, '^[-+]?[0-9]+$') THEN CAST(col AS NUMBER) END AS num
FROM myTable