我的数据库中有VARCHAR
列,其中包含负值,而在检索时我需要将其转换为正值。问题是我知道如果它的整数我可以使用abs()
函数但由于列是VARCHAR
我不能使用abs()
函数。你能帮我么?
这是我的疑问:
select distinct column_name from table_name order by column_name
答案 0 :(得分:5)
假设您只想要正整数和负整数作为有效字符串, 你可以使用:
select CASE WHEN REGEXP_LIKE(s,'^-?[0-9]+$')
THEN abs(s) END
FROM t;
对于非整数,这将返回null
。
在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函数将字符串转换为数字
修改强>
这假设所有值都可以转换为数字,如果没有添加条件来删除不相关的值