VARCHAR我的数据库中有一个包含负值的列,在检索时我需要将其转换为正数.问题是我知道如果它的整数我可以使用abs()函数但是因为列是VARCHAR我不能使用abs()函数.你能帮我么?
这是我的查询:
select distinct column_name from table_name order by column_name
Run Code Online (Sandbox Code Playgroud)
假设您只想要正整数和负整数作为有效字符串,您可以使用:
select CASE WHEN REGEXP_LIKE(s,'^-?[0-9]+$')
THEN abs(s) END
FROM t;
Run Code Online (Sandbox Code Playgroud)
这将返回null非整数.
在Oracle 12c R2及更高版本中,这可以通过TO_NUMBER's DEFAULT子句实现
select ABS( TO_NUMBER( s DEFAULT NULL ON CONVERSION ERROR) ) FROM t;
Run Code Online (Sandbox Code Playgroud)