求简单快捷SQL语句,分解字符串。

madStone_l 2013-09-13 03:16:28
现一个字符串,格式如下:车位地址1,车态位状1|车位地址2,车位状态2|.....车位地址n,车位状态n

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

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


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

求快捷,简单的SQL语句达到上述要求(可在存储过程中实现)。谢谢。。。
...全文
85 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
-Tracy-McGrady- 2013-09-13
  • 打赏
  • 举报
回复

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 行受影响)
發糞塗牆 2013-09-13
  • 打赏
  • 举报
回复
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

*/

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧