1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 93
1

Update позиции 27 в строке с 30 символов

08.12.2017, 22:20. Показов 2526. Ответов 6
Метки нет (Все метки)

Пытаюсь перезаписаит в строке pok (30 символов) позицию 27 с значения 4 на 9, но в результате перезаписывает весь показатель pok. Как поменять только 27-й символ?


SQL
1
2
3
4
5
6
7
8
9
         UPDATE DATA_STRING s SET s.pok=REPLACE ( substr  (s.pok, 27,1) , '4' ,'9')  WHERE s.id   IN
                             
(SELECT s.id FROM DATA_STRING s,  
                  DATA_cut c, 
                  account a  
             WHERE  s.DATA_cut_id = c.id AND 
                    c.DATA_file_id = 41365 AND 
                    s.account_id = a.id(+) AND 
                     pok LIKE '%Nomer%')
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2017, 22:20
Ответы с готовыми решениями:

Удалиние в строке символов в определенной позиции
Здравствуйте. Такая задача: есть переменная типа AnsiString, в которой храниться к примеру путь...

Установка l символов строке s, начиная с позиции n, в значение t
Функція StrSet(s,n,l,t) Призначення: установлення l символів рядку s, починаючи с позиції n, в...

Дана строка символов. Найти номер позиции последней запятой в строке
Дана строка символов. Найти номер позиции последней запятой в строке.

Как в строке удалить указанное количество символов, начиная с заданной позиции?
Доброго времени суток! Подскажите, пожалуйста, как удалить с m по n символов, перезаписать строку и...

6
93 / 71 / 33
Регистрация: 02.08.2015
Сообщений: 202
09.12.2017, 07:33 2
Здравствуйте!

Oracle 11 SQL
1
2
3
UPDATE data_string SET pok = (REPLACE(pok, SUBSTR(pok, 30, 1), 9))
WHERE ...
;
1
760 / 661 / 195
Регистрация: 24.11.2015
Сообщений: 2,158
10.12.2017, 21:59 3
Цитата Сообщение от orion2014 Посмотреть сообщение
UPDATE data_string SET pok = (REPLACE(pok, SUBSTR(pok, 30, 1), 9))
Не понимаю, как такой код меняет 27-й символ.
Скорее нужно как-то REGEXP_REPLACE задействовать, на три группы разбить и среднюю заменить
1
93 / 71 / 33
Регистрация: 02.08.2015
Сообщений: 202
11.12.2017, 04:46 4
Он меняет 30-й символ.
Просто я у себя тестировал, и взял 30-й символ.
Потом уже редактировать сообщение было невозможно в форуме, решил оставить так.
Но думаю, автор ветки разобрался.
1
760 / 661 / 195
Регистрация: 24.11.2015
Сообщений: 2,158
11.12.2017, 09:31 5
Лучший ответ Сообщение было отмечено Heroes как решение

Решение

Цитата Сообщение от orion2014 Посмотреть сообщение
Он меняет 30-й символ.
Нет, он меняет все символы в строке, которые совпадают с тридцатым.
Вот то, что делает orion2014 (только я взял 27-й символ)
SQL
1
SELECT REPLACE('hgsdjhagdhjagskjhskjasxyzwdcks', SUBSTR('hgsdjhagdhjagskjhskjasxyzwdcks', 27, 1), '9') FROM dual;
Вот то, что предлагаю я
SQL
1
SELECT regexp_replace('hgsdjhagdhjagskjhskjasxyzwdcks','(^.{26})(.)(.{3}$)','\19\3') FROM dual;
Чувствуете разницу?

А вот, собственно ответ
SQL
1
2
3
4
5
UPDATE DATA_STRING s 
    SET s.pok=regexp_replace(s.pok,'(^.{26})(.)(.{3}$)','\19\3')
WHERE s.id = ....
  AND LENGTH(s.pok)=30
  -- and substr(s.pok,27,1)='4'
У ТС 27-й символ был, вроде бы, '4', но тут надо более точно определиться с условием: то ли любой 27-й символ, то ли только те строки, где 27-й символ какой-то определенный. Это можно сделать за счет соответствующего условия WHERE.
Кстати, я поставил условие length...=30, поскольку при таком шаблоне замена будет происходить только в 30-символьных строках. Если число символов в строке не равно 30, замены не будет
1
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 93
11.12.2017, 11:11  [ТС] 6
Цитата Сообщение от AGK Посмотреть сообщение
А вот, собственно ответ
SQL
1
2
3
4
5
UPDATE DATA_STRING s 
    SET s.pok=regexp_replace(s.pok,'(^.{26})(.)(.{3}$)','\19\3')
WHERE s.id = ....
  AND LENGTH(s.pok)=30
  -- and substr(s.pok,27,1)='4'
У ТС 27-й символ был, вроде бы, '4', но тут надо более точно определиться с условием: то ли любой 27-й символ, то ли только те строки, где 27-й символ какой-то определенный. Это можно сделать за счет соответствующего условия WHERE.
Кстати, я поставил условие length...=30, поскольку при таком шаблоне замена будет происходить только в 30-символьных строках. Если число символов в строке не равно 30, замены не будет


-- меянет 4 на 9.
Рассшифруйте пожалуйста строчку '(^.{26})(.)(.{3}$)','\19\3'),
где тут 4 а где 9 ?
0
760 / 661 / 195
Регистрация: 24.11.2015
Сообщений: 2,158
11.12.2017, 12:19 7
Лучший ответ Сообщение было отмечено Heroes как решение

Решение

Цитата Сообщение от Heroes Посмотреть сообщение
Рассшифруйте пожалуйста строчку '(^.{26})(.)(.{3}$)','\19\3'),
(^.{26}) - первая группа из 26 произвольных символов в начале строки
(.) - вторая группа из одного произвольного символа. По идее, можно было бы писать (4) . Тогда явно бы присутствовал символ '4'
(.{3}$) - третья группа из трех произвольных символов в конце строки

'\19\3' - шаблон копирования: \1 первая группа без изменений, затем '9' (вместо второй группы), затем \3 - третья группа без изменений.

Читайте описание регулярных выражений.

В WHERE есть закомментированное условие and substr(s.pok,27,1)='4' . Если его раскомментировать (убрать -- в начале строки), то это как раз будет ограничение на то, что 27-й символ равен '4'
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2017, 12:19
Помогаю со студенческими работами здесь

В строке символов каждое слово на четной позиции разбить на слоги и напечатать
Ukr(original) У рядку символів кожне слово на парній позиції розбити на склади та надрукувати їх...

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

Написать и протестировать функцию для замены символов ‘:’ на ‘.’ в заданной строке, начиная с указанной позиции
Написать и протестировать функцию для замены символов ‘:’ на ‘.’ в заданной строке, начиная с...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru