`
yufeng521000
  • 浏览: 6711 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Sqlserver 2014 之 自定义字符串聚合函数

 
阅读更多

最近做的一个HR项目需要同时支持两种数据库(Postgresql and Sqlserver 2014)
但是有一个问题困扰了我,就项目中需要在group 中去聚合一些字符串。

在postgresql 中可以使用内部函数string_agg(filedName, 分割符) 来实现,但是sqlserver 没有这种直接的聚合函数,但是sqlserver 2005以后就支持自定义聚合函数(适用C#进行编码)。
看看实现步骤吧:
1. 在visual studio 2013 中新建一个sqlserver项目。
2. 在新建的sqlserver项目上右键--添加--新项目,然后选择SQL CLR C# ---- SQL CLR C# 用户自定函数, 设置好文件名后点击右下角添加按钮。

3.编写C#代码,代码请参考附件String_agg.7z, 然后编译代码,编译之后会在工程目录obj\Debug生成一个SQL_STRING_AGG.dll 文件(sqlserver 项目名),然后把这个文件拷贝到D盘。(黄色的地方的盘符要一致)

4. 启动sqlserver,连接数据库之后,启动sqlserver 2014的CLR功能

    4.1 启动顺序如下:

          数据库实例右键--方面 会弹出一个窗口,在方面里面选择服务器配置---方面属性---                   clrIntegerationEnabled 设置成 true。(这个必须开启)

5. 执行以下两组sql,创建程序集和聚合函数。
CREATE ASSEMBLY [SQL_STRING_AGG] AUTHORIZATION [dbo]

FROM 'd:\SQL_STRING_AGG.dll'

WITH PERMISSION_SET = SAFE;

GO

 

CREATE AGGREGATE [dbo].[String_agg] (@FieldValue [nvarchar](4000), @Delimiter [nvarchar](4000))

RETURNS [nvarchar](4000)

EXTERNAL NAME [SQL_STRING_AGG].[String_agg];

GO

OK, 完成以上步骤就可以实现以下聚合功能了

表 person:

name            value
张三              12

张三              34

张三              56

张三              78

张三              90
select name, dbo.string_agg(value,',') as group_values from person group by name order name

输出:张三  |  12,34,56,,78,90

0
0
分享到:
评论

相关推荐

    SQLServer自定义字符串聚合函数DLL文件(可直接使用)

    http://yufeng521000.iteye.com/blog/2076607; 根据这篇BOLG的函数编译的DLL,方便大家直接使用; 里面有两个DLL分别是NET3.5,以及NET4.0,下载后根据BOLG以及数据库版本选择对应的DLL使用;

    自定义字符串聚合函数

    sql server 的聚合函数如 sum() count() 等只能对数字类型的数据进行聚合, 而对于字符串 却是不能的,朋友从网上找了相似的案例 经修改后 做了一下总结, 希望对大家有用!!

    C#扩展SQLServer 2005 字符串聚合函数

    4. **调用聚合函数**:在SQL查询中,就可以像使用内置函数一样调用自定义的字符串聚合函数了。 举一个简单的例子,假设我们要创建一个名为`StringConcatenate`的聚合函数,它将所有输入字符串连接成一个长字符串: ...

    SqlServer自定义字符聚合

    标题“SqlSserver自定义字符聚合”所指向的知识点主要是关于如何在SQL Server中创建和使用自定义聚合函数,特别是在处理字符串数据时的特殊需求。自定义字符聚合允许开发者根据业务需求定制特定的聚合逻辑,比如实现...

    Sql Server 字符串聚合函数

    2. **创建自定义字符串聚合函数**: SQL Server提供了用户定义函数(UDF)的功能,我们可以创建一个名为`AggregateString`的函数,它接受一个`Id`参数,然后将所有与该`Id`对应的`Name`字段连接成一个字符串。代码...

    自定义聚合函数:用户定义的聚合函数——评估SQL Server 2005中的新功能.pdf

    在本文中,作者使用C#展示了如何创建一个名为`StringConcat`的自定义聚合函数,该函数接收字符串并将其合并。这个函数的实现逻辑涉及到在.NET环境中处理数据的细节,包括如何存储中间结果,如何在多次调用之间保持...

    在SQL Server中使用CLR实现字符串分段排序的研究.pdf

    SQL Server中的CLR(Common Language Runtime)集成允许开发者利用.NET Framework的编程语言(如C#)来创建存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合函数等数据库对象。这为解决SQL Server中复杂...

    SqlServer GroupConcat

    而`SqlServer GroupConcat`的CLR实现则提供了一个更为简洁的解决方案,使得在SQL Server中进行字符串聚合更加方便。 文件列表中,我们看到有`.html`、`.json`等文件,这可能包含了项目文档、问题讨论、许可信息以及...

    SQL自定义函数讲解

    系统函数是SQL服务器预先定义好的,如数学函数、日期和时间函数、字符串函数等,它们提供了一种标准的方式来处理特定的数据类型或执行特定的操作。用户自定义函数则是用户根据自身需求创建的,以扩展和补充系统函数...

    sqlserver 函数大全

    这些函数可以分为多个类别,包括聚合函数、配置函数、转换函数、加密函数、游标函数、日期和时间函数、数学函数、元数据函数、排名函数、行集函数、安全函数、字符串函数、系统函数、系统统计函数和文本和图像函数。...

    SQLServer中的常用函数.doc

    SQL Server是微软公司...当然,SQL Server提供的函数远不止这些,还有更多的系统函数和自定义函数可供选择,以满足各种复杂的数据处理需求。在实际工作中,建议查阅官方文档或相关资料以获取最完整和最新的函数列表。

    sqlserver函数大全

    1. **聚合函数**:这类函数用于对一组值进行计算并返回单个结果。例如,`SUM()`用于计算所有值的总和,`AVG()`用于求平均值,`COUNT()`统计行数,`MAX()`和`MIN()`则分别用于找出最大和最小值。 2. **字符串函数**...

    解析SQL Server 2005溢用之:合并列值

    由于没有内置的字符串聚合函数,开发人员需要创建自定义的用户定义函数(UDF)来实现这一功能。例如,创建一个名为`dbo.f_str`的函数,该函数接受一个整数参数`@id`,然后通过循环遍历表`tb`中的所有`value`,将它们...

    oracle 和sql Server 函数对比

    - Oracle有`DEGREES`和`RADIANS`函数,而SQL Server没有直接对应的功能,需要自定义转换。 ### 字符串函数 19. **最大值** - Oracle使用`GREATEST`函数,SQL Server使用`MAX`函数,但后者通常用于聚合查询。 - ...

    SQL常用功能自定义函数

    3. **50个Sql语句**: 这可能是一个练习集,涵盖了SQL基础到进阶的各种操作,如SELECT、INSERT、UPDATE、DELETE等,也可能包含JOIN、子查询、聚合函数等复杂用法。 4. **完善SQL农历转换函数**: 农历转换函数是处理...

    字符串聚合函数(去除重复值)

    在SQL中,字符串聚合函数通常用于将多个字符串合并为一个单一的字符串,这在处理大量字符串数据时非常有用。在给定的示例中,我们关注的是一个自定义的聚合函数`dbo.merge`,它的目的是将具有相同`test_id`的`test_...

    SQLServer2000常用函数大全(经典).chm

    - **字符串函数**:如CHARINDEX()查找子字符串的位置,CONCAT()连接两个或更多字符串,LEFT()和RIGHT()分别返回字符串的左部和右部字符。 - **转换函数**:如CAST()和CONVERT()将一种数据类型转换为另一种。 2. *...

    SQLServer2000常用函数大全-经典

    5. **聚合函数**:在查询中用于对一组值进行计算,如`COUNT()`计数,`SUM()`求和,`AVG()`计算平均值,`MAX()`和`MIN()`找出最大或最小值。 6. **系统信息函数**:如`@@ROWCOUNT`返回最后执行的语句影响的行数,`...

Global site tag (gtag.js) - Google Analytics