0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 3

Поиск и обрезание после определенного значения\символа в строке

13.06.2024, 17:50. Показов 1748. Ответов 14
Метки sql (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня!

Возник вопрос как найти и обрезать строку после определенного значения.
Пример, в строке есть значение [uxd:144500108735404145] ORA-20001:, хотел обрезать до ORA-20001.

Тренировался использовать PATINDEX с запросом
SQL
1
SELECT '[uxd:144500108735404145] ORA-20001:',SUBSTRING('[uxd:144500108735404145] ORA-20001:', PATINDEX('%%[[a-z:0-9]]%','[uxd:144500108735404145] ORA-20001:'),10)
Но запрос обрезает как-то странно, получается так
SQL
1
5] ORA-200
Почему-то не обрезает последние два символа, или я что-то делаю не так, или что-то не понял.
Подскажите, куда смотреть или что поправить, буду очень благодарен, спасибо.

CHARINDEX находит первое вхождение по совпадению, а коды uxd:... всегда разные по длине, поэтому отмел использование CHARINDEX.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.06.2024, 17:50
Ответы с готовыми решениями:

Поиск определенного слова в строке и замена определенного символа после этого слова
Представим что у нас есть следующая строка: "Дядя Петя 10 раз ударил дядю Васю, но дядя Вася оказался не трусом и дал сдачи в виде 1...

C# C++ Задача поиск определенного символа в строке, запись того что после него в дргую строку
Вот пошагово: 1)Создать файл из символов, последний символ *(маркер) 2)После маркера записать ешё некоторое кол-во символов 3)...

Поиск определённого по числу символа, в строке
Как с помощью jquery найти, например пятый пробел в строке, и заменить его на число 1 допустим. Пробую регулярками, может другой есть...

14
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
13.06.2024, 18:59
а кто будет скобку закрывающую искать и пробел? я бы charindex использовал
substring('[uxd:144500108735404145] ORA-20001:',CHARINDEX ('ORA','[uxd:144500108735404145] ORA-20001:'),1000)
0
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 3
14.06.2024, 10:49  [ТС]
Согласен, что в примере, который я указал, удобнее CHARINDEX.
Наверное, я не совсем корректно выразился...

Вот пример ошибок, которые пишутся в базу (реальный пример=))

SQL
1
Ошибка подключения к  EKIS:  java.sql.SQLException: ORA-20001: Критическая ошибка: [ux:278500110035773428] Не найден агент по ИНН/КПП 7810793375/   ### ORA-20001: Не найден агент по ИНН/КПП 7810793375/ ORA-06512: на  "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1440 ORA-06512: на  "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1935 ORA-06512: на  line 1
и
SQL
1
Ошибка подключения к  EKIS:  java.sql.SQLException: ORA-20001: Критическая ошибка: [uxd:463170600034248429] ORA-20001: Не найден агент с кодом 632133739953000000000 ORA-06512: на  "EKIS.S_XML_UFO_UPLOAD", line 1615 ORA-06512: на  line 1
Мне нужно обрезать и оставить все, что после [uxd:...] или [ux:...]. В этом случае, как я понял, CHARINDEX не подходит, нужно что-то другое, поэтому я и обратил внимание на PATINDEX.

Только не говорите мне, что это извращение и надо резать ошибку на уровне приложения, это уже совсем другой вопрос=)
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
14.06.2024, 11:24
Цитата Сообщение от HooousE Посмотреть сообщение
Мне нужно обрезать и оставить все, что после [uxd:...] или [ux:...]
Select SubString('YourString', CharIndex('[ux', 'YourString') - 2, 1000)
0
 Аватар для Дядя Виля
47 / 39 / 9
Регистрация: 12.06.2024
Сообщений: 179
14.06.2024, 11:44
если эти ошибки всегда такие однотипные:
T-SQL
1
2
declare @ss varchar(500) = 'Ошибка подключения к  EKIS:  java.sql.SQLException: ORA-20001: Критическая ошибка: [uxd:463170600034248429] ORA-20001: Не найден агент с кодом 632133739953000000000 ORA-06512: на  "EKIS.S_XML_UFO_UPLOAD", line 1615 ORA-06512: на  line 1' 
select substring(@ss,charindex(']',@ss)+1,len(@ss))
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.06.2024, 13:04
PATINDEX не умеет находить символ ']' потому что не поддерживает escape. Прикол - а '[' умеет). Не могу даже понять как твой пример работает и почему возвращаеи ту позицию, хрень какая-то. можно твой последний вариант чуть усложнить - сначала искать '[ux', а потом ']' после него:
T-SQL
1
2
3
4
declare @s nvarchar(max) = N'Ошибка подключения к  EKIS:  java.sql.SQLException: ORA-20001: Критическая ошибка: [ux:278500110035773428] Не найден агент по ИНН/КПП 7810793375/   ### ORA-20001: Не найден агент по ИНН/КПП 7810793375/ ORA-06512: на  "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1440 ORA-06512: на  "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1935 ORA-06512: на  line 1'
select CHARINDEX('[ux',@s),
    charindex(']',@s, CHARINDEX('[ux',@s)),
    substring(@s,charindex(']',@s, CHARINDEX('[ux',@s))+2,1000)
(No column name)(No column name)(No column name)
84106Не найден агент по ИНН/КПП 7810793375/ ### ORA-20001: Не найден агент по ИНН/КПП 7810793375/ ORA-06512: на "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1440 ORA-06512: на "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1935 ORA-06512: на line 1
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
14.06.2024, 13:21
Цитата Сообщение от Аватар Посмотреть сообщение
PATINDEX не умеет находить символ ']' потому что не поддерживает escape
а так: '[]]' ?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.06.2024, 13:28
[[] поймет, а []] ни капли )
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
14.06.2024, 14:14
Аватар, так работает: Select PatIndex('%]%', 'abc]def')
Только непонятно, зачем тут шаблон, если нужно искать конкретную подстроку и это чисто про CharIndex история
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.06.2024, 16:11
зато так не работает )
T-SQL
1
Select PatIndex('%[%', 'abc[def')
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
14.06.2024, 17:41
Цитата Сообщение от Аватар Посмотреть сообщение
зато так не работает )
зато так работает: Select PatIndex('%[[]%', 'abc[def')
И вообще
Цитата Сообщение от Аватар Посмотреть сообщение
PATINDEX не умеет находить символ ']' потому что не поддерживает escape. Прикол - а '[' умеет)
+
Цитата Сообщение от Jack Famous Посмотреть сообщение
непонятно, зачем тут шаблон, если нужно искать конкретную подстроку и это чисто про CharIndex история
0
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 43
19.06.2024, 07:27
Цитата Сообщение от Аватар Посмотреть сообщение
зато так не работает )
T-SQLВыделить код
1
Select PatIndex('%[%', 'abc[def')
Это же вроде регулярное выражение (РВ)?
Тогда '%[%' это некорректное РВ. '[' - это начало перечисления символов...

Надо так: '%\[%' (экранировать символ)

Или нет?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
19.06.2024, 07:40
Цитата Сообщение от mkp Посмотреть сообщение
Надо так: '%\[%' (экранировать символ)
PatIndex не поддерживает escape поэтому нет ни какого экранирования
0
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 43
19.06.2024, 09:02
Select PatIndex('%]%', 'abc]def')
Select PatIndex('%[[]%', 'abc[def')


Вот так обе скобы работают

Добавлено через 9 минут
Если есть возможность поставить на сервер CLR "RegEx" - то нет предела в извращениях - штука мощная и быстрая.
Поставленная задача решается "на раз".

SQL
1
2
DECLARE @s nvarchar(MAX) = N'Ошибка подключения к  EKIS:  java.sql.SQLException: ORA-20001: Критическая ошибка: [ux:278500110035773428] Не найден агент по ИНН/КПП 7810793375/   ### ORA-20001: Не найден агент по ИНН/КПП 7810793375/ ORA-06512: на  "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1440 ORA-06512: на  "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1935 ORA-06512: на  line 1'
SELECT dbo.RegExReplace(@s, '.*?\[ux:.*?\]\s*(.*)', '$1')
Результат:

Не найден агент по ИНН/КПП 7810793375/ ### ORA-20001: Не найден агент по ИНН/КПП 7810793375/ ORA-06512: на "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1440 ORA-06512: на "EKIS.S_XML_UFO_OSAGO_UPLOAD", line 1935 ORA-06512: на line 1
0
1306 / 360 / 98
Регистрация: 14.10.2022
Сообщений: 1,103
19.06.2024, 10:10
Цитата Сообщение от Аватар Посмотреть сообщение
PatIndex не поддерживает escape поэтому нет ни какого экранирования
REPLACE на какую-нибудь заведомо не встречающуюся кракозябру.
~ # $ и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.06.2024, 10:10
Помогаю со студенческими работами здесь

Строка: поиск определенного символа (буквы) в строке
Подскажите как найти в строке определенную букву, и заменить ее на "!"

Поиск заглавных букв после определенного символа
Функции передается указатель на строку char*str.функция должна делать следующее найти и вернуть количество заглавных букв стоящих после...

Загрузка данных из файла, значения после определенного символа
Программа подтягивает настройки из конфигурационного файла. Реализовал так что считывает файл построчно, дожидаясь необходимого...

Из файла после определенного символа в нужной строке вывести оставшуюся строку на экран
#include<iostream> #include<string> #include<conio.h> #include<Windows.h> #include<fstream> #include<vector> #include<stdio.h> ...

Поиск определенного значения в строке
Есть Edit1->text = "wwwwwwwwwwdddddddlife765420194ttttttdddddqqqqqq" Нужно в Edit2 скопировать 9 цифр выделенных красным. Сама строка и...


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

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

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru