Преобразование отрицательных значений в положительные динамически - PullRequest
0 голосов
/ 10 мая 2018

В моей базе данных есть столбец VARCHAR, который содержит отрицательные значения, и при получении мне нужно преобразовать его в положительное. Проблема в том, что я знаю, что если его целое число, я могу использовать функцию abs(), но поскольку столбец равен VARCHAR, я не могу использовать функцию abs(). Не могли бы вы мне помочь?

Это мой запрос:

select distinct column_name  from table_name order by column_name

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Предполагая, что вы хотите только положительные и отрицательные целые числа в качестве допустимых строк, Вы можете использовать:

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

Это вернет null для нецелых чисел.

Демо

В Oracle 12c R2 и выше это может быть достигнуто с помощью TO_NUMBER 'DEFAULT clause

select ABS( TO_NUMBER( s DEFAULT NULL ON CONVERSION ERROR) ) FROM t;
0 голосов
/ 10 мая 2018

Вам просто нужно сначала преобразовать в число, используя функцию to_number :

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

Функция Oracle SQL TO_NUMBER преобразует строку в число

EDIT

Это при условии, что все значения можно преобразовать в числа, если не добавить условие для удаления неактуальных значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...