когда я хочу обновить столбец без нечисловых значений в Oracle 9i - PullRequest
0 голосов
/ 23 мая 2018

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

update tablename set columnname=to_number(regexp_replace(columnname,'\D',''));

вышеуказанный запрос успешно работает на oracle 11g версия, но не работает в oracle 9i ошибка getiing как

ora-00904 redexp_replace invalid identifire

как я могу обновить все записи, что является заменой regexp_replace в oracle 9i

Ответы [ 2 ]

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

Oracle 10g представил функции регулярных выражений REGEXP_SUBSTR, REGEXP_REPLACE, REGEXP_INSTR и REGEXP_LIKE, поэтому они не будут работать в Oracle 9i.

Вместо этого можно использовать 2 TRANSLATE () призывает a) найти все используемые нецифровые символы, затем b) удалить все эти нецифровые символы, оставив только цифры:

select
       translate (mix_string,'x0123456789','x') non_digits
     , translate (mix_string,'0'||translate (mix_string,'x0123456789','x'),'0') only_digits
from (
     select '1a2b3c4d5e6f7h8i9j0k' mix_string
     from dual
       union all
     select '1amn2bxd3clp4d5e(*^(&6f7hsaxz8i9j0k' mix_string
     from dual
     )

|    |        NON_DIGITS         | ONLY_DIGITS |
|----|---------------------------|-------------|
|  1 | abcdefhijk                |  1234567890 |
|  2 | amnbxdclpde(*^(&fhsaxzijk |  1234567890 |

см .: http://rextester.com/EMS52462

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

, поскольку ошибка говорит о недопустимом идентификаторе redexp_replace ora-00904 ... поэтому возможно использование redexp_replace вместо regexp_replace (вместо d вместо g)

...