Извлечь правильную строку между двумя последними скобками - PullRequest
1 голос
/ 11 июня 2019

Мне нужно извлечь значения в последних скобках каждой строки.Столбец Имя - это то, что у меня есть, а столбец ID - это то, что мне нужно.

Обратите внимание, что в строке 2 есть два набора скобок, а в одной строке нет скобок.

![enter image description here

Я пытался использовать этот скрипт:

SUBSTRING(name,CHARINDEX('(',name)+1 ,CHARINDEX(')',name)-CHARINDEX('(',name)-1) 

Сценарий возвращает сообщение об ошибке Недопустимый параметр длины, переданный вФункция LEFT или SUBSTRING. , поскольку третья строка не содержит скобок.

Ответы [ 2 ]

3 голосов
/ 11 июня 2019

Для ваших примеров данных это должно делать то, что вы хотите:

select replace(right(name, charindex('(', reverse(name) + '(') - 1), ')', '')
1 голос
/ 11 июня 2019

Поскольку ID всегда последний

SELECT *,
       REPLACE(RIGHT(Str, CHARINDEX('(', REVERSE(Str)) - 1), ')', '')
FROM (
       VALUES ('Smith, Donald R.(Don) (NBK1234)'), 
              ('Rogers, Bob (A1234457)'),
              ('Rogers, Bob (A1234457)(A1B2)')
     ) T(Str);

Возвращает:

+---------------------------------+----------+
|               Str               |    ID    |
+---------------------------------+----------+
| Smith, Donald R.(Don) (NBK1234) | NBK1234  |
| Rogers, Bob (A1234457)          | A1234457 |
| Rogers, Bob (A1234457)(A1B2)    | A1B2     |
+---------------------------------+----------+

Если ID, который вы хотите извлечь, не всегда находится в конце, но всегда является единственной строкой с числами, то

SELECT *,
       REPLACE(REVERSE(REPLACE(SUBSTRING(REVERSE(Str),PATINDEX('%[0-9]%', REVERSE(Str)), CHARINDEX('(', REVERSE(Str))-1), '(', '')), ' ', '')
FROM (
       VALUES ('Smith, Donald R.(Don) (NBK1234)'), 
              ('Rogers, Bob (A1234457)'),
              ('Rogers, Bob (A1234457)(not an id)')
     ) T(Str);

Возвращает:

+-----------------------------------+----------+
|                Str                |    ID    |
+-----------------------------------+----------+
| Smith, Donald R.(Don) (NBK1234)   | NBK1234  |
| Rogers, Bob (A1234457)            | A1234457 |
| Rogers, Bob (A1234457)(not an id) | A1234457 |
+-----------------------------------+----------+

Посмотрите, как это работает в Live Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...