首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求容易快捷SQL语句,分解字符串

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

求简单快捷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                                                                                                                                                                                                                                                 


------------- -------------------
车位地址1         车态位状1
车位地址2         车位状态2
车位地址n         车位状态n

*/


[解决办法]

declare @str varchar(200)
set @str='车位地址1,车态位状1
[解决办法]
车位地址2,车位状态2
[解决办法]
车位地址13,车位状态13
[解决办法]
车位地址n,车位状态n'
if OBJECT_ID('tmp',N'U')>0 drop table tb
create table tmp(BerthCode VARCHAR(20),BerthStatus VARCHAR(20))
set @str=LTRIM(RTRIM(@str))
if RIGHT(@str,1)<>'
[解决办法]
'
  set @str=@str+'
[解决办法]
'
while CHARINDEX('
[解决办法]
',@str)>0
begin
  insert into tmp(BerthCode,BerthStatus)
  select SUBSTRING(@str,1,CHARINDEX(',',@str)-1),SUBSTRING(@str,CHARINDEX(',',@str)+1,CHARINDEX('
[解决办法]
',@str)-1-CHARINDEX(',',@str))
  set @str=STUFF(@str,1,CHARINDEX('
[解决办法]
',@str),'')
end
select * from tmp
drop table tmp

--结果
BerthCode            BerthStatus
-------------------- --------------------
车位地址1                车态位状1
车位地址2                车位状态2
车位地址13               车位状态13
车位地址n                车位状态n

(4 行受影响)

热点排行