sql server 表值函数将字符串转为列

1.标题:将字符串@str变成表中的列

DECLARE @str VARCHAR(8000)
SET @str=‘a,bb,cc,dd,ff,gg‘

SELECT @str,* FROM Func_SplitStrToTable(@str)

代码如下:SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
CREATE FUNCTION [dbo].[Func_SplitStrToTable] ( @str VARCHAR(8000) )
RETURNS @tableName TABLE ( Col VARCHAR(100) )
AS --该函数用于把一个用逗号分隔的多个数据字符串变成一个表的一列,例如字符串‘1,2,3,4,5‘ 将转换成一个表

    BEGIN

        SET @str = @str + ‘,‘

        DECLARE @insertStr VARCHAR(100) --截取后的第一个字符串

        DECLARE @newstr VARCHAR(8000) --截取第一个字符串后剩余的字符串

        SET @insertStr = LEFT(@str, CHARINDEX(‘,‘, @str) - 1)

        SET @newstr = STUFF(@str, 1, CHARINDEX(‘,‘, @str), ‘‘)

        INSERT  @tableName
        VALUES  ( @insertStr )

        WHILE ( LEN(@newstr) > 0 )
            BEGIN

                SET @insertStr = LEFT(@newstr, CHARINDEX(‘,‘, @newstr) - 1)

                INSERT  @tableName
                VALUES  ( @insertStr )

                SET @newstr = STUFF(@newstr, 1, CHARINDEX(‘,‘, @newstr), ‘‘)

            END

        RETURN

    END
GO
/*
2.标题:按某字段合并字符串之一(简单合并)
3.作者:(十八年风雨,守得冰山雪莲花开)
4.时间:2008-11-06
5.地点:广东深圳
6.
7.描述:将如下形式的数据按id字段合并value字段。
8.id    value
9.----- ------
10.1     aa
11.1     bb
12.2     aaa
13.2     bbb
14.2     ccc
15.需要得到结果:
16.id     value
17.------ -----------
18.1      aa,bb
19.2      aaa,bbb,ccc
20.即:group by id, 求 value 的和(字符串相加)
21.*/
22.--1、sql2000中只能用自定义的函数解决
23.create table tb(id int, value varchar(10))
24.insert into tb values(1, ‘aa‘)
25.insert into tb values(1, ‘bb‘)
26.insert into tb values(2, ‘aaa‘)
27.insert into tb values(2, ‘bbb‘)
28.insert into tb values(2, ‘ccc‘)
29.go
30.
31.create function dbo.f_str(@id varchar(10)) returns varchar(1000)
32.as
33.begin
34.  declare @str varchar(1000)
35.  select @str = isnull(@str + ‘,‘ , ‘‘) + cast(value as varchar) from tb where id = @id
36.  return @str
37.end
38.go
39.
40.--调用函数
41.select id , value = dbo.f_str(id) from tb group by id
42.
43.drop function dbo.f_str
44.drop table tb
45.
46.
47.--2、sql2005中的方法
48.create table tb(id int, value varchar(10))
49.insert into tb values(1, ‘aa‘)
50.insert into tb values(1, ‘bb‘)
51.insert into tb values(2, ‘aaa‘)
52.insert into tb values(2, ‘bbb‘)
53.insert into tb values(2, ‘ccc‘)
54.go
55.
56.select id, [value] = stuff((select ‘,‘ + [value] from tb t where id = tb.id for xml path(‘‘)) , 1 , 1 , ‘‘)
57.from tb
58.group by id
59.
60.drop table tb
61.
62.
63.--3、使用游标合并数据
64.create table tb(id int, value varchar(10))
65.insert into tb values(1, ‘aa‘)
66.insert into tb values(1, ‘bb‘)
67.insert into tb values(2, ‘aaa‘)
68.insert into tb values(2, ‘bbb‘)
69.insert into tb values(2, ‘ccc‘)
70.go
71.declare @t table(id int,value varchar(100))--定义结果集表变量
72.--定义游标并进行合并处理
73.declare my_cursor cursor local for
74.select id , value from tb
75.declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
76.open my_cursor
77.fetch my_cursor into @id , @value
78.select @id_old = @id , @s=‘‘
79.while @@FETCH_STATUS = 0
80.begin
81.    if @id = @id_old
82.       select @s = @s + ‘,‘ + cast(@value as varchar)
83.    else
84.      begin
85.        insert @t values(@id_old , stuff(@s,1,1,‘‘))
86.        select @s = ‘,‘ + cast(@value as varchar) , @id_old = @id
87.      end
88.    fetch my_cursor into @id , @value
89.END
90.insert @t values(@id_old , stuff(@s,1,1,‘‘))
91.close my_cursor
92.deallocate my_cursor
93.
94.select * from @t
95.drop table tb  
时间: 2024-11-07 02:02:17

sql server 表值函数将字符串转为列的相关文章

SQL Server系统函数:字符串函数

原文:SQL Server系统函数:字符串函数 1.字符转化为ASCII,把ASCII转化为字符,注意返回的值是十进制数 select ASCII('A'),ASCII('B'),ASCII('a'),ASCII('b'),ASCII('?') select CHAR(65),CHAR(66),CHAR(97),CHAR(98),CHAR(63) 2.unicode字符转化为整数,把整数转化为unicode字符 select UNICODE('A'),UNICODE('B'),UNICODE('

SQL SERVER 2008- 字符串函数

/* 1,ASCII返回字符表达式中最左侧字符的ASCII代码值 仅返回首字母的ASCII码值 parameter char或varchar returns integer */ SELECT ASCII('a') --97 SELECT ASCII('A') --65 SELECT ASCII('aA') --97 SELECT ASCII('0') --48 SELECT ASCII('01') --48       /* 2,CHAR将整数ASCII代码转换为字符 parameter TI

SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

原文:SQL Server 2008 R2--PIVOT 行转列 以及聚合函数的选择 ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性. 未经作者同意请勿修改(包括本声明),保留法律追究的权利. 未经作者同意请勿用于学术性引用. 未经作者同意请勿用于商业出版.商业印刷.商业引用. 本文不定期修正完善,为保证内容正确,建议移步原文处阅读. 本文

数据库开发基础-SQl Server 聚合函数、数学函数、字符串函数、时间日期函数

SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函数的基本类型是: Aggregate 函数 Scalar 函数 合计函数(Aggregate functions) Aggregate 函数的操作面向一系列的值,并返回一个单一的值. 注释:如果在 SELECT 语句的项目列表中的众多其它表达式中使用 SELECT 语句,则这个 SELECT 必须使

13、SQL Server 自定义函数

SQL Server 自定义函数 在SQL Server中不仅可以使用系统函数(如:聚合函数,字符串函数,时间日期函数等)还可以根据需要自定义函数. 自定义函数分为标量值函数和表值函数. 其中,标量值函数用于返回单个值,而表值函数用于返回一个结果集. 函数参数 参数可以是常量.表中的某个列.表达式或其他类型的值.在函数中有三种类型的参数. 1.输入:指必须输入一个值. 2.可选值:在执行该参数时,可以选择不输入参数. 3.默认值:函数中默认有值存在,调用时可以不指定该值. 创建标量值函数 语法:

SQL Server 常用函数总结

SQL去空格函数 1.ltrim(‘内容’)--去掉字符左边的空格 代码如下 declare @str varchar(100) set @str=' ADFADF' select @str select ltrim(@str) 2.rtrim(‘内容’)---去掉列值右边的空格 ---作用和LTRIM()一样,这里不做介绍 3.ltrim(rtrim('内容')):去掉字符串左边和右边的空格 4.replace(计算字段,' ','')---去掉计算字段列值中所有的空格,如下代码: decla

SQL Server 2000 函数使用---CAST 和 CONVERT

本文来自:http://www.cnblogs.com/xh831213/category/47654.html 将某种数据类型的表达式显式转换为另一种数据类型.CAST 和 CONVERT 提供相似的功能. 语法 使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, style]) 参数 expression 是任何有效的 Microsoft® SQL

四个很好用的Sql Server 日期函数:DateDiff、DatePart、DateAdd、DateName

我以前查一段时间范围内的数据都是在程序里计算好日期再掉查询语句,现在我用下面的函数.SQL SERVER没有查一季度数据的函数. DateDiff函数: 描述 返回两个日期之间的时间间隔. 语法 DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) DateDiff 函数的语法有以下参数: 参数 描述 interval 必选.字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔.有关数值,请参

SQL Server -- 自定义函数(学习总结,备忘)

SQL Server自定义函数,以前只在书上看过,没有动手去敲一敲,今天刚好接触到,看了几篇博文学习了下.做好备忘很重要!! (@[email protected])Y Learn from:http://www.cnblogs.com/lideng/archive/2013/04/15/3022418.html 自定义函数分为:标量值函数或表值函数两种. 标量值函数:如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 表值函数:如果 RETURNS 子句指定 TABLE,则函