2010-01-11 57 views
0

什麼是extracting the values from vvv.www.xxx.yyy.zzz提取SQL SERVER 2005中的字符?

注意,VVV或www或XXX YYY或ZZZ或最好的方式可以變化即,它可以是任何長度的。因此,我不能使用substring with charindex

我不想用LOOP或CURSOR做到這一點。通過使用CTE和一個數字表也可以完成,但這將是一個有點冗長的程序。

任何簡單的1行程序都可以完成相同的任務。

所需的輸出將是

Col1 Col2 Col3 Col4 Col5 

vvv www xxx yyy zzz 

這是我們的任務

感謝

+0

最好的辦法是不要保存數據的方式。如果每個塊意味着不同的東西,並且希望能夠使用這些數據塊,則將它們存儲在單獨的字段中。 – HLGEM

回答

0

可以使用SUBSTRING與CHARINDEX,它只是需要更多一點的工作:

declare @s as varchar(25) 
set @s = 'vvv.www.xxx.yyy.zzz' 
select 
left(@s, charindex('.', @s) - 1) as col1, 
substring(@s, charindex('.', @s) + 1, charindex('.', @s, charindex('.', @s) + 1) - charindex('.', @s) - 1) as col2, 
substring(@s, charindex('.', @s, charindex('.', @s) + 1) + 1, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) - charindex('.', @s, charindex('.', @s) + 1) - 1) as col3, 
substring(@s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1, charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1) - charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) - 1) as col4, 
right(@s, len(@s) - charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1)) as col5 

你可以清潔我牛逼了一個參加這樣的:

declare @s as varchar(25) 
set @s = 'vvv.www.xxx.yyy.zzz' 
select left(@s, first - 1) as col1, 
    substring(@s, first + 1, second - first - 1) as col2, 
    substring(@s, second + 1, third - second - 1) as col3, 
    substring(@s, third + 1, fourth - third - 1) as col4, 
    right(@s, len(@s) - fourth) 
from (select @s s) a 
inner join 
(
    select charindex('.', @s) as first, 
    charindex('.', @s, charindex('.', @s) + 1) as second, 
    charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) as third, 
    charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1) as fourth 
) b on 1=1 

+0

在這種情況下,兩個查詢都失敗set @s ='vv55v.w6666ww.xx7777x.yy88888y.z99999zz' Msg 537,Level 16,State 2,Line 3 傳遞給LEFT或SUBSTRING函數的長度參數無效。 –

+0

只需將@s聲明爲更大的varchar,它就會被截斷。我假設你會從表中選擇,這只是示例代碼。 – RedFilter