2017-10-14 110 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) 
       )