我有一個數據庫表中的字符串是這樣的:SQL Server 2005:將字符串拆分爲數組並獲取數組(x)?
Peter/Parker/Spiderman/Marvel
Bruce/Wayne/Batman/DC
是否有SQL的方式例如從字符串中提取特定的值
Name = MyColumn(0)
SurName = MyColumn(1)
Character = MyColumn(3)
Company = MyColumn(4)
感謝
我有一個數據庫表中的字符串是這樣的:SQL Server 2005:將字符串拆分爲數組並獲取數組(x)?
Peter/Parker/Spiderman/Marvel
Bruce/Wayne/Batman/DC
是否有SQL的方式例如從字符串中提取特定的值
Name = MyColumn(0)
SurName = MyColumn(1)
Character = MyColumn(3)
Company = MyColumn(4)
感謝
如果你知道你將會有確切的4列,那麼你也可以使用這個嵌套的CTE版本:
;with s1 (name, extra) as
(
select left(data, charindex('/', data)-1),
substring(data, charindex('/', data) +1, len(data))
from yourtable
),
s2 (name, surname, extra) as
(
select name,
left(extra, charindex('/', extra)-1),
substring(extra, charindex('/', extra)+1, len(extra))
from s1
),
s3 (name, surname, [character], company) as
(
select name,
surname,
left(extra, charindex('/', extra)-1),
substring(extra, charindex('/', extra)+1, len(extra))
from s2
)
select *
from s3;
結果是:
| NAME | SURNAME | CHARACTER | COMPANY |
-----------------------------------------
| Peter | Parker | Spiderman | Marvel |
| Bruce | Wayne | Batman | DC |
或者你可以實現分割數據的CTE,然後執行一個PIVOT
:
;with cte (item, data, colNum, rn) as
(
select cast(left(data, charindex('/',data+'/')-1) as varchar(50)) item,
stuff(data, 1, charindex('/',data+'/'), '') data,
1 colNum,
row_number() over(order by data) rn
from yourtable
union all
select cast(left(data, charindex('/',data+'/')-1) as varchar(50)) ,
stuff(data, 1, charindex('/',data+'/'), '') data,
colNum+1,
rn
from cte
where data > ''
)
select [1] as Name,
[2] as Surname,
[3] as [character],
[4] as company
from
(
select item, colnum, rn
from cte
) src
pivot
(
max(item)
for colnum in ([1], [2], [3], [4])
) piv
我在這裏假設有總是精確4個部分組成。
如果是這樣,您可以用.
代替/
並使用ParseName函數中的nice函數。從你的例子唯一的問題是,它從最終統計,所以你必須要小心你想要的部分:
DECLARE @test VARCHAR(max);
SET @test = 'Peter/Parker/Spiderman/Marvel';
SET @test = Replace(@test, '/', '.');
SELECT Parsename(@test, 4),--returns Peter
Parsename(@test, 3),--returns Parker
Parsename(@test, 2),--returns Spiderman
Parsename(@test, 1) --returns Marvel
如果有部件數量可變的,你需要找到一個字符串分割功能爲你做這個,沒有一個好的內置。許多選項可以發現搜索SO:https://stackoverflow.com/search?q=[sql+server]+string+split
Word的警告 - 如果您嘗試使用一個數字與PARSENAME
非1- 4,結果將始終爲NULL。
您的數據中是否有未知數量的斜槓?/?或者它會一直有3個? – Taryn