2017-10-14 112 views
0

在表中的列包含一个标准文本等如下:T-SQL:一个字符串提取部

Variable Length Text (12345) follows more variable length text again. 

我的目标是选择12345,或实际(之间的数目)也如该数可以是不同的长度。 有什么建议吗?

SELECT SUBSTRING(TcSubjectTx_N, CHARINDEX('(', TcSubjectTx_N)+1, CHARINDEX(')', TcSubjectTx_N)-CHARINDEX('(', TcSubjectTx_N)-1) 
FROM T_TcTicket 
WHERE TcTicketID=78945 

回答

1

使用SUBSTRING()功能如下CHARINDEX()功能:

SELECT SUBSTRING(<Column>, CHARINDEX('(', <Column>)+1, CHARINDEX(')', <Column>)-CHARINDEX('(', <Column>)-1); 

输出:

12345 

注意:这会给你()

+0

TNX,而是抛出一个错误传递给LEFT或SUBSTRING function' – DeepDiver

+0

TNX再次'无效的长度参数,这正是我所做的,试图查询添加到我原来的问题。 – DeepDiver

+1

@DeDDiver我认为你的列不包含数据()。 –

0

这里有一个方法:

select t.*, v2.exp 
from t cross apply 
    (values (stuff(t.col, 1, charindex('(', t.col + '('), '')) 
    ) v1(exp) cross apply 
    (values (left(v1.exp, charindex(')', v1.exp + ')') - 1)) 
    ) v2(exp); 

注:这得到第一开括号和闭括号之间的一切。

Here是一个rextester。

0
之间的所有字符串/数字

试试这个:

DECLARE 
@STRING VARCHAR(MAX)= 
'Variable Length Text (12345) follows more variable length text again.' 

SELECT SUBSTRING(@STRING, 
      CHARINDEX('(',@STRING)+1, 
      (CHARINDEX(')',@STRING)-1)-CHARINDEX('(',@STRING) 
       )