Sql 在Oracle中是否有与TRY_CONVERT()等效的工具?

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

如果转换成功,T-SQL中的TRY_CONVERT()将返回转换为指定数据类型的值;否则它将返回NULL

ORACLE中是否有类似的功能或重现这种行为的方法

从12.2版开始,您可以使用
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