Удалить числа, найденные в строковом столбце

Каким будет SQL для удаления всех чисел, найденных в строковом столбце, с использованием Sqlite (пример Oracle также будет оценен)?

Пример: я хотел бы удалить все числа из таких записей:

291 HELP,1456 CALL

Ожидаемый результат:

HELP,CALL

edit: я отредактировал вопрос, потому что я хочу удалить числа не только из одной записи, но и из многих.


person user3927897    schedule 22.02.2015    source источник


Ответы (3)


Либо вы делаете это на языке, встроенном в sqlite, либо используете этот код SQLite, который удаляет все числа:

UPDATE table SET column = replace(column, '0', '' );
UPDATE table SET column = replace(column, '1', '' );
UPDATE table SET column = replace(column, '2', '' );
UPDATE table SET column = replace(column, '3', '' );
UPDATE table SET column = replace(column, '4', '' );
UPDATE table SET column = replace(column, '5', '' );
UPDATE table SET column = replace(column, '6', '' );
UPDATE table SET column = replace(column, '7', '' );
UPDATE table SET column = replace(column, '8', '' );
UPDATE table SET column = replace(column, '9', '' );
person Clemens Frahnow    schedule 22.02.2015
comment
Некоторые другие способы достижения этого: stackoverflow.com /вопросы/13240298/ - person tourniquet_grab; 22.02.2015

Использование ПЕРЕВОД и ЗАМЕНА

SQL> WITH DATA AS(
  2  SELECT '291 HELP' str FROM dual UNION ALL
  3  SELECT '1456 CALL' str FROM dual
  4  )
  5  SELECT REPLACE(translate(str, '0123456789', ' '), ' ', NULL) str
  6  FROM DATA
  7  /

STR
---------
HELP
CALL

SQL>

Использование REGEXP_REPLACE

SQL> WITH DATA AS(
  2  SELECT '291 HELP' str FROM dual UNION ALL
  3  SELECT '1456 CALL' str FROM dual
  4  )
  5  SELECT trim(regexp_replace(str, '[0-9]+')) str
  6  FROM DATA
  7  /

STR
---------
HELP
CALL

SQL>

Класс символов POSIX

SQL> WITH DATA AS(
  2  SELECT '291 HELP' str FROM dual UNION ALL
  3  SELECT '1456 CALL' str FROM dual
  4  )
  5  SELECT trim(regexp_replace(str, '^[[:digit:]]+')) str
  6  FROM DATA
  7  /

STR
---------
HELP
CALL

SQL>

Perl-расширения

SQL> WITH DATA AS(
  2  SELECT '291 HELP' str FROM dual UNION ALL
  3  SELECT '1456 CALL' str FROM dual
  4  )
  5  SELECT trim(regexp_replace(str, '\d+')) str
  6  FROM DATA
  7  /

STR
---------
HELP
CALL

SQL>
person Lalit Kumar B    schedule 22.02.2015
comment
ОШИБКА: функция regexp_replace(текст, неизвестно) не существует - person Luffydude; 16.06.2021
comment
@Luffydude Это не ошибка Oracle, любая ошибка Oracle начинается с кода ошибки ORA-, за которым следует сообщение об ошибке. Опубликуйте свой вариант использования с версией Oracle и объясните, что вы на самом деле пытаетесь сделать. - person Lalit Kumar B; 18.06.2021

person    schedule
comment
У него всегда будет место с обеих сторон, вам нужно обрезать пробелы. - person Lalit Kumar B; 22.02.2015