在Oracle中有与TRY_CONVERT()等效的东西吗?

时间:2019-11-13 15:37:32

标签: sql oracle plsql

如果强制转换成功,则T-SQL中的

TRY_CONVERT()将返回一个转换为指定数据类型的值;否则它将返回NULL。

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

3 个答案:

答案 0 :(得分:7)

从版本12.2开始,您可以使用cast(... DEFAULT NULL ON CONVERSION ERROR)

完整示例:

SELECT cast('ABC' AS NUMBER DEFAULT NULL ON CONVERSION ERROR) FROM dual

答案 1 :(得分:1)

如果您不在Oracle 12.2上,则可以使用正则表达式确定该值在转换前是否有效。对于整数(在数学意义上,表示可选符号,然后是一个或多个数字):

SELECT
  CASE WHEN REGEXP_LIKE(col, '^[-+]?[0-9]+$') THEN CAST(col AS NUMBER) END AS num
FROM myTable

这与Oracle 12.2 DEFAULT NULL ON CONVERSION ERROR具有相同的行为。

对于除整数以外的其他值,可以使用相同的方法,但是正则表达式会变得更困难。

答案 2 :(得分:0)

您引用了Oracle PL / SQL,因此可以尝试使用EXCEPTION块,该块可以包含在用户定义的函数中。这将适用于Oracle 11.2版本。

DECLARE nTest NUMBER; BEGIN nTest := CAST ('ABC' AS NUMBER); EXCEPTION WHEN VALUE_ERROR THEN nTest := NULL; END;