繁体   English   中英

在最后两个括号之间提取右字符串

[英]Extract right string between last two parentheses

我需要提取每行最后一个括号内的值。 是我需要的,列ID是我需要的。

请注意,第2行有两组括号,而一行没有括号。

![在此处输入图片描述

我尝试使用此脚本:

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

该脚本返回错误消息, Invalid length parameter传递给LEFT或SUBSTRING函数。 因为第三行没有括号。

对于您的样本数据,这应该做您想要的:

select replace(right(name, charindex('(', reverse(name) + '(') - 1), ')', '')

由于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 |
+-----------------------------------+----------+

现场演示中查看其工作方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM