在Sql中处理表中字符串列中的数字问题
如有表数据,部分记录(其中列'banid'为主关键字)如下:
banid stylenocolor
2**15-*2-046 特白:11件;中灰:8件;彩蓝:8件;鲜黄:8件;鲜橙:8件;
... ...
需要取出列'stylenocolor'中的数据,并求和。目前我采取的方法如下:
--创建记录板单颜色件数信息表 IF EXISTS(SELECT 1 FROM sysobjects WHERE id=OBJECT_ID('tb_getSum_banid') AND xtype='U') DROP TABLE tb_getSum_banid GO CREATE TABLE tb_getSum_banid ( banid VARCHAR(20) PRIMARY KEY NOT NULL, qty INT DEFAULT 0 ) GO --定义声明获取板单件数游标 DECLARE @banid VARCHAR(20),@qty INT,@stylenocolor VARCHAR(2000) DECLARE cur_getSum_banid CURSOR FOR SELECT DISTINCT banid,stylenocolor FROM b_itemsendfactory_head WHERE ISNULL(banid,'') <> '' --打开游标 OPEN cur_getSum_banid --使用游标 FETCH NEXT FROM cur_getSum_banid INTO @banid,@stylenocolor WHILE @@FETCH_STATUS=0 BEGIN DECLARE @x INT SET @x=0 SET @qty=0 WHILE @x < LEN(@stylenocolor)+1 BEGIN --取第一次查询到的数字 SET @qty = @qty + SUBSTRING(@stylenocolor, patindex('%[^0-9][0-9]%',@stylenocolor)+1, patindex('%[0-9][^0-9]%',@stylenocolor)-patindex('%[^0-9][0-9]%', @stylenocolor)) --取第一次出现数字后的字符 SET @stylenocolor = SUBSTRING(@stylenocolor, patindex('%[0-9][^0-9]%',@stylenocolor)+1, LEN(@stylenocolor)-patindex('%[0-9][^0-9]%',@stylenocolor)+1) SET @x = @x + 1 END --逐行插入表数据 INSERT INTO tb_getSum_banid VALUES(@banid,@qty) FETCH NEXT FROM cur_getSum_banid INTO @banid,@stylenocolor END --关闭游标 CLOSE cur_getSum_banid --释放游标 DEALLOCATE cur_getSum_banid GO