Найти значения между двумя символами '(' и ')' в столбце с нулевыми значениями - PullRequest
0 голосов
/ 25 марта 2019

У меня есть имя таблицы авторов.Мне нужно извлечь значения в конце их имен, исключая '(' и ')'.

enter image description here

Я попытался использовать подстроку с функцией Charindex.

select 
isnull (SUBSTRING(name,CHARINDEX('(',name) +1 ,CHARINDEX(')',name) - CHARINDEX('(',name) - 1), '') as  [Name]
from Authors

Но я получил сообщение об ошибке.

Сообщение 537, Уровень 16, Состояние 3, Строка 6

Недопустимый параметр длины, переданный в функцию LEFT или SUBSTRING.

Вот что яЯ ожидаю, что мои результаты будут.

enter image description here

Ответы [ 4 ]

1 голос
/ 25 марта 2019

Для ваших данных я бы сделал что-то вроде этого:

select coalesce(replace(stuff(name, 1, charindex('(', name + '(') + 1, ''), ')', ''),
                '') as  [Name]

Это предполагает, что круглые скобки находятся в конце строки, как в примерах.

0 голосов
/ 25 марта 2019
declare @string nvarchar(25)

set @string = '(asdfgh)'

выберите REPLACE (REPLACE (@string, '(', ''), ')', '') где @string like '% [(] %% [)]%'

в приведенном выше коде я использовал регулярное выражение, чтобы найти строку между (и), а затем заменил их на пустой

0 голосов
/ 25 марта 2019

Вы можете использовать APPLY:

select substring(name, tt.startp + 1, (endp - startp) - 1) as Name
from Authors a cross apply
     ( values (charindex('(', name + ')'), charindex(')', name + ')')) 
     ) tt(startp, endp); 

Ваш столбец Name не имеет ( ... ) в некоторых местах, поэтому вы можете добавить либо whereпредложение или добавить явно ( ... ) в конце строки.

0 голосов
/ 25 марта 2019

здесь, примените к вашей ситуации

declare @string varchar(25)
set @string = '(asdfgh)'
SELECT SUBSTRING(@string, 
    charindex('(', @string)+1, 
    charindex(')', @string)-
    charindex('(', @string)-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...