数据库数据列字符串分割
1. 需求
原始数据
对超标指标进行分割,以便对每个指标进行统计,统计结果如下:
2. 代码
/*
3.
4. execute GetExceededStandardForWaterSource
5.
6. */
7. -- =============================================
8. -- Author: <Author,,Name>
9. -- Create date: <Create Date,,>
10.-- Description: <Description,,>
11.-- =============================================
12.create PROCEDURE GetExceededStandardForWaterSource
13. -- Add the parameters for the stored procedure here
14.AS
15.BEGIN
16. -- SET NOCOUNT ON added to prevent extra result sets from
17. -- interfering with SELECT statements.
18. SET NOCOUNT ON;
19.
20.CREATE TABLE #tmpTable(
21. [监测年] [char](4) COLLATE Chinese_PRC_CI_AS NULL,
22. [监测月] [char](2) COLLATE Chinese_PRC_CI_AS NOT NULL,
23. [水源地编码] [char](18) COLLATE Chinese_PRC_CI_AS NOT NULL,
24. [水源地类型编码] [varchar](2) COLLATE Chinese_PRC_CI_AS NULL,
25. [水源地类型] [varchar](8) COLLATE Chinese_PRC_CI_AS NOT NULL,
26. [流域编码] [varchar](12) COLLATE Chinese_PRC_CI_AS NULL,
27. [流域名称] [varchar](10) COLLATE Chinese_PRC_CI_AS NULL,
28. [行政区划代码] [varchar](18) COLLATE Chinese_PRC_CI_AS NULL,
29. [区域] [varchar](8) COLLATE Chinese_PRC_CI_AS NULL,
30. [省份] [varchar](16) COLLATE Chinese_PRC_CI_AS NULL,
31. [超标指标] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
32. [超标个数] [int] NOT NULL
33.) ON [PRIMARY]
34.
35.declare @监测年char(4),@监测月char(2),@水源地编码char(18),@水源地类型编码varchar(2),@水源地类型varchar(8),@流域编码varchar(12),@流域名称varchar(10),@行政区划代码varchar(18),@区域varchar(8),@省份varchar(16),@超标指标varchar(1000),@超标个数int
36.declare @ch as varchar(100)
37.declare @StrSeprate char
38.set @StrSeprate = ','
39.
40.declare Index_cursor cursor for
41.select 监测年,监测月,水源地编码,水源地类型编码,水源地类型,流域编码,流域名称,行政区划代码,区域,省份,超标指标,超标个数from V_ExceededStandardForWaterSource
42.
43.open Index_cursor
44.FETCH NEXT FROM Index_cursor into @监测年,@监测月,@水源地编码,@水源地类型编码,@水源地类型,@流域编码,@流域名称,@行政区划代码,@区域,@省份,@超标指标,@超标个数
45.
46.while @@fetch_status = 0
47.begin
48. set @超标指标= @超标指标+ @StrSeprate
49.--print @超标指标
50. while(@超标指标<>'')
51. begin
52. set @ch=left(@超标指标,charindex(',',@超标指标,1)-1)
53.--print @ch
54. insert #tmpTable values(@监测年,@监测月,@水源地编码,@水源地类型编码,@水源地类型,@流域编码,@流域名称,@行政区划代码,@区域,@省份,@ch,@超标个数)
55. set @超标指标= stuff(@超标指标,1,charindex(',',@超标指标,1),'')
56. end
57. FETCH NEXT FROM Index_cursor into @监测年,@监测月,@水源地编码,@水源地类型编码,@水源地类型,@流域编码,@流域名称,@行政区划代码,@区域,@省份,@超标指标,@超标个数
58.end
59.CLOSE Index_cursor
60.DEALLOCATE Index_cursor
61.
62.select * from #tmpTable
63.drop table #tmpTable
64.END
65. GO
66. 结论