TRY_CONVERT()将返回一个转换为指定数据类型的值;否则它将返回NULL。
ORACLE中是否有类似的功能或重现此行为的方法?
答案 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;