Преобразование varchar в число - PullRequest
4 голосов
/ 18 ноября 2011

У меня есть вопрос, который беспокоит меня. Как я могу преобразовать varchar в число, если внутри varchar значение состоит из алфавитов.

Для значений моего столбца цены varchar:

14dollars10cents
15dollars20cents

Если преобразовать его в столбец varchar для числовых цен, значения должны быть:

1410
1520

Я знаю, что если varchar не состоит из каких-либо алфавитов, он может автоматически конвертироваться как "

SELECT CONVERT(INT, PRICE) FROM Table

Есть ли способ избавиться от алфавитов в середине, как я хотел бы сделать математическую функцию на нем.

Обновлена ​​попытка ввода номера с фиксированной точкой в:

SELECT CAST (Replace(REPLACE(PRICE, 'dollars', '.'),'cents','') AS Number(4,2))) 
FROM TEST;

Спасибо

Ответы [ 4 ]

3 голосов
/ 18 ноября 2011

Вы можете просто использовать REGEXP_REPLACE, чтобы удалить все нецифровые символы:

SELECT REGEXP_REPLACE(price, '[^[:digit:]]')
  FROM table;

Чтобы затем преобразовать это в число:

SELECT TO_NUMBER(REGEXP_REPLACE(price, '[^[:digit:]]'))
  FROM table;

Если вы хотите добавить точкузатем вы можете сделать это с помощью REGEXP_REPLACE:

SELECT TO_NUMBER(REGEXP_REPLACE(val, '^([0-9]*)([^[:digit:]]*)([0-9]*)(.*)$', '\1.\3'))
  FROM table;

Вуаля ...

2 голосов
/ 18 ноября 2011
SELECT CAST(REPLACE(YourVarcharCol, 'dollars', '') AS INT) FROM Table

Проблема в том, что он сломается, если varchar все еще содержит буквенно-цифровые символы.

0 голосов
/ 18 ноября 2011

Как насчет использования translate для удаления нежелательных символов.

SELECT TO_NUMBER(TRANSLATE('14dollars10cents','1234567890dolarscents','1234567890')) FROM DUAL
0 голосов
/ 18 ноября 2011

Нет, я не думаю, что есть прямой путь. Вы можете выполнить разбор строк, чтобы получить целочисленное значение.

...