sql server 2005中分隔列中数据

本文介绍了一种使用 SQL 实现数组拆分的方法,通过创建辅助表并结合字符串操作函数来实现对存储在 VARCHAR 类型字段中数组的有效解析。
--建立辅助表
SET NOCOUNT ON;
USE AdventureWorks;
GO
IF OBJECT_ID('dbo.Nums'IS NOT NULL
  
DROP TABLE dbo.Nums;
GO
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT@rc AS INT;
SET @max = 1000000;
SET @rc = 1;

INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
  
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
  
SET @rc = @rc * 2;
END

INSERT INTO dbo.Nums
  
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;

--示例表
IF OBJECT_ID('dbo.Arrays'IS NOT NULL
  
DROP TABLE dbo.Arrays;
GO

CREATE TABLE dbo.Arrays
(
  arrid 
VARCHAR(10)   NOT NULL PRIMARY KEY,
  array 
VARCHAR(8000NOT NULL
)

INSERT INTO Arrays(arrid, array) VALUES('A''20,22,25,25,14');
INSERT INTO Arrays(arrid, array) VALUES('B''30,33,28');
INSERT INTO Arrays(arrid, array) VALUES('C''12,10,8,12,12,13,12,14,10,9');
INSERT INTO Arrays(arrid, array) VALUES('D''-4,-6,-4,-2');

--实施方法
SELECT arrid, substring(array,n,charindex(',',array+',',n)-n), n
FROM dbo.Arrays
  
JOIN dbo.Nums
    
ON n <= LEN(array)
    
AND SUBSTRING(','+array, n, 1= ','
/**//*
select arrid,charindex(',',array+',',n)-n from dbo.Arrays  JOIN dbo.Nums
    ON n <= LEN(array)
    AND SUBSTRING(','+array, n, 1) = ','
*/

/**//*
SELECT arrid, array, n
FROM dbo.Arrays
  JOIN dbo.Nums
    ON n <= LEN(array)
    AND SUBSTRING(array, n, 1) = ','
*/
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值