动态地将负值转换为正值

时间:2018-05-10 08:51:05

标签: oracle

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

这是我的疑问:

select distinct column_name  from table_name order by column_name

2 个答案:

答案 0 :(得分:5)

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

select CASE WHEN REGEXP_LIKE(s,'^-?[0-9]+$') 
       THEN abs(s) END 
  FROM t;

对于非整数,这将返回null

Demo

在Oracle 12c R2及更高版本中,这可以通过TO_NUMBER' DEFAULT子句来实现

select ABS( TO_NUMBER( s DEFAULT NULL ON CONVERSION ERROR) ) FROM t;

答案 1 :(得分:1)

您只需要先使用to_number函数转换为数字:

select distinct abs(to_number(column_name)) from table_name order by column_name
  

Oracle SQL TO_NUMBER函数将字符串转换为数字

修改

这假设所有值都可以转换为数字,如果没有添加条件来删除不相关的值