动态地将负值转换为正值

yas*_*een 1 sql oracle

VARCHAR我的数据库中有一个包含负值的列,在检索时我需要将其转换为正数.问题是我知道如果它的整数我可以使用abs()函数但是因为列是VARCHAR我不能使用abs()函数.你能帮我么?

这是我的查询:

select distinct column_name  from table_name order by column_name
Run Code Online (Sandbox Code Playgroud)

Kau*_*yak 5

假设您只想要正整数和负整数作为有效字符串,您可以使用:

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)