Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MS SQL. Разбор подстроки в select / 5 сообщений из 5, страница 1 из 1
13.04.2020, 21:24
    #39946768
KUDZURI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL. Разбор подстроки в select
Всем добра.
Прошу помочь с разбором строк из столбца
У меня есть тысяча строк следюущего содержания:

Тут есть регистрационный номер, ном. рег. N 4B10-12-2561-A-777P, и дальше текст который не нужен.
Тут есть регистрационный номер, Рег.номер 224562000B001P, и дальше текст который не нужен.

Мне необходимо в запросе отообразить только рег номера.
Я пошёл путём substring, string split не могу задействовать так как сервер 12. Но упёрся в то, что не знаю как в одном запросе select видоизменить один и тот же столбцец с разным входящим индексом.

Вот в каком направлении двигался:
Код: sql
1.
2.
substring(НазначениеПлатежа, charindex('N',@STRING)+1, ISNULL(NULLIF(CHARINDEX(',',@STRING, CHARINDEX('N',@STRING)+1),0)-CHARINDEX('N',@STRING), LEN(@STRING))-1) AS РегистрационныйНомер
FROM #T
...
Рейтинг: 0 / 0
13.04.2020, 22:16
    #39946779
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL. Разбор подстроки в select
KUDZURI,

Вы не привели алгоритм выделения нужного номера
...
Рейтинг: 0 / 0
13.04.2020, 22:32
    #39946788
KUDZURI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL. Разбор подстроки в select
Критик, мне нужно получить в выборке только рег номера, ниже выделены зеленым, прошу помочь.
Код: sql
1.
2.
3.
4.
SELECT
substring(НазначениеПлатежа, charindex('N',НазначениеПлатежа)+1
, ISNULL(NULLIF(CHARINDEX(',',НазначениеПлатежа, CHARINDEX('N',НазначениеПлатежа)+1),0)-CHARINDEX('N',НазначениеПлатежа), LEN(НазначениеПлатежа))-1) AS РегистрационныйНомер
FROM #T


Находит рег номер в строке: Тут есть регистрационный номер, ном. рег. N 4B10-12-2561-A-777P, и дальше текст который не нужен.
Код: sql
1.
2.
3.
substring(НазначениеПлатежа, CHARINDEX('.',НазначениеПлатежа)+6
, ISNULL(NULLIF(CHARINDEX(',',НазначениеПлатежа, CHARINDEX('.',НазначениеПлатежа)+6),0)-CHARINDEX('.',НазначениеПлатежа), LEN(НазначениеПлатежа))-6) AS РегистрационныйНомер
FROM #T


Находит рег номер в строке: Тут есть регистрационный номер, Рег.номер 224562000B001P, и дальше текст который не нужен.


1. Возможно можно оптимизировать до одного запроса, думал зацепиться за вторую запятую и от неё вырезать всё до пробела влево, но понимания пока нет как это сделать...
2. Если возможности из первого пункта нет, как подвести эти два запроса, чтобы отработали оба, но каждый на своей строке?.
...
Рейтинг: 0 / 0
13.04.2020, 23:32
    #39946799
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL. Разбор подстроки в select
KUDZURI,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select b.resNum, a.rightPart, z.message
  from (values (N'Тут есть регистрационный номер, ном. рег. N 4B10-12-2561-A-777P, и дальше текст который не нужен.')
             , (N'Тут есть регистрационный номер, Рег.номер 224562000B001P, и дальше текст который не нужен.')
             , (N'Тут нетути')
             , (N'тут типа чисел быть не может и латинской н N 4B10-12-2561-A-777P запятой нетути')
             , (N'N 4B10-12-2561-A-777P, опа')) as z(message)
 cross apply(values (stuff(z.message, 1, nullif(patindex(N'%[N0-9]%', z.message), 0) - 1, ''))) as a(rightPart)
 cross apply(values (left(a.rightPart, nullif(charindex(',', a.rightPart), 0) - 1))) as b(resNum)

fiddle
...
Рейтинг: 0 / 0
14.04.2020, 00:51
    #39946808
KUDZURI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL. Разбор подстроки в select
nullin,
Спасибо, изящно, но мне не подходит такой вариант.
Подошла такая конструкция:

Код: sql
1.
substring(@p, patindex(N'%[N0-9]%',@p)+1, ISNULL(NULLIF(CHARINDEX(',',@p, patindex(N'%[N0-9]%',@p)+1),0)-patindex(N'%[N0-9]%',@p), LEN(@p))-1) AS РегистрационныйНомер
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MS SQL. Разбор подстроки в select / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]