access 合并多行字符串_数据分析师有理由爱Sqlserver之六-Sqlserver拥有字符串聚合函数...

在数据处理过程中,有一需求也是经常性遇到:对字符串的聚合操作,一般来说,聚合类函数只会在数值类型上进行计算,但有时为了人的阅读需求,将字符串进行聚合操作,得到一个用于备注性的信息查阅,还是有必要的。

在Excel环境中,可以用PowerQuery轻松实现,但在数据库层面,实现这样的需求也还是颇曲折的。

本篇正要行文时,百度了一下,竟然最新版Sqlserver2017已经支持本篇的实现效果,技术的进步,过往的方案将被丢入封尘角落,不过还好,官方实现的效果还是有一点点不是太完美,还可以拿出来再讲解并使用的。

使用场景

聚合后的字符串,很难再有分析的价值,正如引文所述,更多地用来作一些备注性浏览使用。

在一个常见的场景中,不同用户分别购买过哪些的订单,将其所有订单号合并起来展示,这样的需求,就类似于将不同客户的购买数量汇总一样,只是后者是可真实地相加的汇总,前者是字符串的拼接,中间一般用分隔符隔开方便阅读。

虽然说在Excel环境或PowerBI环境可以同样实现这些功能,但有时方案的可行性需要考虑客观情况,用户电脑是否有高版本的Excel支持PowerQuery或有PowerBI可使用,若没有时,使用Sqlserver上将数据加工好,直接让用户端调用此查询的结果,这样就非常有应用价值了。

所以很多时候不是自己会做,更多时候还要让其他不会做的人更轻松更低成本地获得所要效果,这就衍生了许多

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 SQL Server 中,可以使用 CLR(公共语言运时)来实现将汉字转换为拼音的功能。以下是一个基本的CLR函数示例: 1. 创建一个新的CLR项目 2. 在项目中添加一个新的类,并替换代码如下: ```csharp using System; using System.Data.SqlTypes; using System.Globalization; using Microsoft.SqlServer.Server; using System.Text; using System.Text.RegularExpressions; public class Pinyin { [SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true)] public static SqlString Convert(SqlString input) { if (input.IsNull) return SqlString.Null; string str = input.Value.Trim(); if (string.IsNullOrEmpty(str)) return SqlString.Empty; StringBuilder builder = new StringBuilder(); foreach (char c in str) { if (Regex.IsMatch(c.ToString(), @"[\u4e00-\u9fa5]")) { builder.Append(GetPinyin(c)); } else { builder.Append(c); } } return builder.ToString(); } private static string GetPinyin(char c) { CultureInfo culture = new CultureInfo("zh-CN"); TextInfo textInfo = culture.TextInfo; string pinyin = textInfo.ToTitleCase(new ChineseChar(c).Pinyins[0]).Replace(" ", ""); return pinyin.Substring(0, pinyin.Length - 1); } } ``` 3. 将项目编译为DLL文件,并将其注册到SQL Server中: ```sql CREATE ASSEMBLY Pinyin FROM 'C:\Pinyin.dll' -- 替换为DLL文件路径 WITH PERMISSION_SET = SAFE; CREATE FUNCTION dbo.fn_Pinyin (@input NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS EXTERNAL NAME Pinyin.[Pinyin.Pinyin].Convert; ``` 现在,您可以使用以下SQL语句来调用此函数: ```sql SELECT dbo.fn_Pinyin('你好,世界') -- 输出 'nǐhǎo,shìjiè' ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值