Поскольку 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