日期:2014-05-17  浏览次数:20592 次

求简单快捷SQL语句,分解字符串。
现一个字符串,格式如下:车位地址1,车态位状1|车位地址2,车位状态2|.....车位地址n,车位状态n 

格式说明:
1.记录之间是用“|”号分隔
2.字段之间是用“,”号分隔

需要将其分解为一个临时表,表结构如下:
CREATE TABLE #Tmp
(
  BerthCode VARCHAR(20) ,-- 车位地址
  BerthStatus VARCHAR(20)-- 车位位状
)


我实现过用“|”分解为临时表,再“,”分解临时表中的记录。。。
但这样我就创建了4个临时表,才达到效果。。

求快捷,简单的SQL语句达到上述要求(可在存储过程中实现)。谢谢。。。
sql 存储 结构 分解

------解决方案--------------------
CREATE TABLE test (id INT,[key] NVARCHAR(256))
INSERT INTO test
VALUES(1,'车位地址1,车态位状1
------解决方案--------------------
车位地址2,车位状态2
------解决方案--------------------
车位地址n,车位状态n')

;WITH cte AS (
SELECT distinct
    SUBSTRING([key],number,CHARINDEX('
------解决方案--------------------
',[key]+'
------解决方案--------------------
',number)-number) as [key]
from
    test a,master..spt_values 
where
    number >=1 and number<len([key])  
    and type='p' 
    and substring('
------解决方案--------------------
'+[key],number,1)='
------解决方案--------------------
')
SELECT SUBSTRING([key],1,CHARINDEX(',',[key],1)-1)  AS BerthCode,SUBSTRING([key],CHARINDEX(',',[key],1)+1,LEN([key])) AS [BerthStatus]
FROM cte
/*
BerthCode       BerthStatus