Как заменить запятую значение в столбце таблицы на пользовательское значение ввода оракула - PullRequest
0 голосов
/ 17 мая 2011


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

COL

123,234
56,123

Если пользователь вводит 123, в 1-м столбце должно быть только 234, а во втором ряду - только 56.
Как мы можем это сделать в oracle ??
Пожалуйста, помогите
Спасибо

Ответы [ 2 ]

3 голосов
/ 17 мая 2011
delete from yourtable t
where
  instr(','||t.col||',', '123') > 0

Вы можете заменить «123» параметром, если хотите.

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

[править] Неправильно понял вопрос. Вы имели в виду это:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Добавьте ',' до и после, чтобы сопоставить элементы в начале или конце значения.
  • Замените, используя значение ', 123,' (внутри запятой), чтобы предотвратить случайное совпадение с 1234.
  • Используйте substr дважды, чтобы удалить первый и последний символ (добавленные запятые)
  • Используйте instr в месте, чтобы предотвратить обновление записей, которые не нужно обновлять (повышенная производительность).
1 голос
/ 17 мая 2011

попробуйте это:

UPDATE t
SET col = REPLACE(REPLACE(col, '&variable', ''), ',', '') FROM t ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...