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

Kim*_*imo 0 sql oracle plsql

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

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

Rad*_*t81 7

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

完整的例子:

SELECT cast('ABC' AS NUMBER DEFAULT NULL ON CONVERSION ERROR) FROM dual
Run Code Online (Sandbox Code Playgroud)


Ed *_*bbs 5

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

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

这提供了与 Oracle 12.2 相同的行为DEFAULT NULL ON CONVERSION ERROR

对于整数以外的值,同样的方法适用,但正则表达式变得更难。