2011-04-23 49 views
3

只是要清楚,我不能使用CLR UDF和SUBSTRINGCHARINDEX只是不切芥子。複雜的T-SQL子串

我們有一個賬戶被他人的子帳戶一個虛假的帳戶管理系統,更好地描述here(附表太:))

現在,假設我有一個帳戶2.4.1.3(顯然,母公司成爲2.4.1)如果想提取「前綴」2.4.1,以便我可以創建另一個同行中的下一個ID(假設爲2.4.1.4)的兄弟賬戶,我將如何去分解T-SQL中的這樣一個字符串?

當然,類似的方式可以應用於兒童帳戶,但這只是這聖代的奶油糖果。

+0

你有沒有考慮過使用內建的'HierarchyId'類型? '選擇CAST('/ 2/4/1/3 /'作爲HierarchyId)。GetAncestor(1).ToString()' – 2011-04-23 11:07:01

回答

2

嘗試是這樣的:

DECLARE @accountno VARCHAR(50) = '2.4.1.3' 

SELECT 
    REVERSE(@accountno), 
    CHARINDEX('.', REVERSE(@accountno)), 
    SUBSTRING(@accountno, 1, LEN(@accountno) - CHARINDEX('.', REVERSE(@accountno))) 

,在SELECT聲明第三個元素應該是從你的賬戶號碼串提取「前綴」 2.4.1之一。

基本上,我所做的是反轉字符串,然後查找點的第一次出現('.') - 反轉字符串中的第一個字符串是原始字符串中的最後一個,這就是您想要提取的內容。

+0

就是這樣!感謝隊友,現在在這個問題上撓了我的頭2個小時,我不想浪費更多的時間。對你來說當然很容易:) – 2011-04-23 11:04:27