Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 3

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

13.06.2024, 17:50. Показов 1676. Ответов 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
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
14.06.2024, 11:24
Цитата Сообщение от HooousE Посмотреть сообщение
Мне нужно обрезать и оставить все, что после [uxd:...] или [ux:...]
Select SubString('YourString', CharIndex('[ux', 'YourString') - 2, 1000)
0
 Аватар для Дядя Виля
41 / 33 / 9
Регистрация: 12.06.2024
Сообщений: 165
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
932 / 365 / 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
932 / 365 / 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
932 / 365 / 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
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,089
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru