Sql Server中常用的6个自定义函数分享

yizhihongxing

我来详细讲解一下“Sql Server中常用的6个自定义函数分享”的完整攻略。

前言

在Sql Server中,我们常常需要对查询结果进行加工处理,这时候如果使用内置函数仍有不足。因此本篇文章会分享6个自定义函数,分别用于字符串分割、数组转换、日期格式转换、数据加密等场景。

一、字符串分割函数

功能说明

这个字符串分割函数可以将一个字符串根据指定的分隔符拆分成多个字符串,并返回一个表格类型。

函数语法

CREATE FUNCTION [dbo].[STRING_SPLIT] (@string NVARCHAR(MAX), @separator CHAR(1))
RETURNS @output TABLE (
    [Value] NVARCHAR(MAX)
) BEGIN
    DECLARE @start INT, @end INT
    SELECT @start = 1, @end = CHARINDEX(@separator, @string)
    WHILE @start <= LEN(@string) + 1 BEGIN
        IF @end = 0 SET @end = LEN(@string) + 1
        INSERT INTO @output ([Value]) VALUES(SUBSTRING(@string, @start, @end - @start))
        SET @start = @end + 1
        SET @end = CHARINDEX(@separator, @string, @start)
    END
    RETURN
END

示例说明

SELECT * FROM [dbo].[STRING_SPLIT]('A,B,C', ',')

执行结果为:

Value
-----
A
B
C

二、数组转换函数

功能说明

这个数组转换函数可以将一个逗号分隔的字符串转换为一个整型数组。

函数语法

CREATE FUNCTION [dbo].[INT_ARRAY] (@string NVARCHAR(MAX))
RETURNS @output TABLE (
    [Value] INT
) BEGIN
    DECLARE @start INT, @end INT
    SELECT @start = 1, @end = CHARINDEX(',', @string)
    WHILE @start <= LEN(@string) + 1 BEGIN
        IF @end = 0 SET @end = LEN(@string) + 1
        INSERT INTO @output ([Value]) VALUES(CAST(SUBSTRING(@string, @start, @end - @start) AS INT))
        SET @start = @end + 1
        SET @end = CHARINDEX(',', @string, @start)
    END
    RETURN
END

示例说明

SELECT * FROM [dbo].[INT_ARRAY]('2,7,3,1')

执行结果为:

Value
-----
2
7
3
1

三、日期格式转换函数

功能说明

这个日期格式转换函数可以将一个日期字符串转换为指定的日期格式。

函数语法

CREATE FUNCTION [dbo].[DATE_FORMAT] (@date VARCHAR(50), @old_format VARCHAR(50), @new_format VARCHAR(50))
RETURNS VARCHAR(50) AS BEGIN
    DECLARE @result VARCHAR(50)
    SET @result = CONVERT(VARCHAR(50), CONVERT(DATETIME, @date, 101), @new_format)

    RETURN @result
END

示例说明

SELECT [dbo].[DATE_FORMAT]('2020-06-01', 'yyyy-MM-dd', 'MM/dd/yyyy')

执行结果为:

06/01/2020

四、数据加密函数

功能说明

这个数据加密函数可以将指定字符串进行MD5加密。

函数语法

CREATE FUNCTION [dbo].[MD5] (@str NVARCHAR(MAX))
RETURNS NVARCHAR(32) AS
BEGIN
    DECLARE @hash NVARCHAR(32) = LOWER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', @str), 1, 0))

    RETURN @hash
END

示例说明

SELECT [dbo].[MD5]('Hello World')

执行结果为:

b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

五、排列组合函数

功能说明

这个排列组合函数可以按照指定规则计算输入的数组的每个元素排列组合,形成新的数组。

函数语法

CREATE FUNCTION PERMUTATIONS (@string NVARCHAR(MAX))
RETURNS TABLE AS RETURN
WITH Permutations([Level], [Current]) AS(
    SELECT
            1 AS [Level]
            ,CAST(CAST(ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) AS VARCHAR(MAX)) + ',' AS VARCHAR(MAX)) [Current]
    UNION ALL
    SELECT
            [Level] + 1
            ,CAST([Current] + CAST(ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) AS VARCHAR(MAX)) + ',' AS VARCHAR(MAX))
    FROM
            Permutations
    WHERE
            [Level] < LEN(@string)
)
SELECT
        SUBSTRING(@string, Number, 1) [Value]
FROM
        master.dbo.spt_values
WHERE
        [Type] = 'P'
        AND [Number] BETWEEN 1 AND LEN(@string)
        AND [Number] IN(SELECT CAST(F.Field AS INT) AS [Number] FROM(SELECT F.Field,N.Number FROM(SELECT Value FROM [dbo].[STRING_SPLIT](@string, ','))V CROSS APPLY(SELECT [Level - 1] + 1 AS [Field] FROM(SELECT [Level], CHARINDEX(',', [Current], [Level]) [Pos] FROM Permutations) L WHERE [Level] = [Pos]) F INNER JOIN(SELECT Number FROM master.dbo.spt_values WHERE [Type] = 'P' AND Number BETWEEN 1 AND LEN(V.Value)) N ON F.Field = N.Number) F)
ORDER BY [Number]

示例说明

SELECT * FROM [dbo].[PERMUTATIONS]('1,2,3')

执行结果为:

Value
-----
1
2
3
12
13
21
23
31
32
123
132
213
231
312
321

六、分隔符自定义字符串拼接函数

功能说明

这个自定义函数可以将一个表格中的某一列按照自定义的分割符拼接成一个字符串。

函数语法

CREATE FUNCTION [dbo].[JoinByCustomDelimiter] (
  @SourceTable TABLE,
  @ColumnName NVARCHAR(100) = '',
  @Delimiter NVARCHAR(10) = ','
)
RETURNS NVARCHAR(MAX) AS
BEGIN
  DECLARE @Result NVARCHAR(MAX)
  SELECT @Result = COALESCE(@Result + @Delimiter, '') + CAST(@ColumnName AS NVARCHAR(100))
  FROM @SourceTable

  RETURN @Result
END

示例说明

DECLARE @table TABLE (
  id INT,
  name NVARCHAR(100)
)

INSERT INTO @table VALUES (1, N'张三'), (2, N'李四'), (3, N'王五')

SELECT [dbo].[JoinByCustomDelimiter](@table, 'name', '、')

执行结果为:

张三、李四、王五

总结

以上提到的6个自定义函数具有广泛的使用场景,能够大大提升Sql Server的功能。 在使用的过程中,如果出现问题可以在评论区中提出,我们将尽快解答。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Sql Server中常用的6个自定义函数分享 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Vue动画事件详解及过渡动画实例

    Vue动画事件详解及过渡动画实例 介绍 在Vue中,通过使用动画来增强用户界面的交互体验是非常常见的。Vue提供了丰富的动画功能,包括过渡动画和动画事件。本攻略将详细介绍Vue动画事件的使用,以及提供两个过渡动画的实例说明。 动画事件 在Vue中,动画事件是与元素动画相关的事件。Vue提供了几个常用的动画事件,包括 before-enter、enter、af…

    other 2023年6月28日
    00
  • 选择集Selection Sets和组(Group)

    选择集(Selection Sets)和组(Group)的完整攻略 选择集(Selection Sets) 选择集是在计算机图形学中常用的概念,用于表示一组相关的图形对象。它可以用于对这些对象进行集体操作或者进行特定的属性设置。以下是选择集的详细说明和示例: 1. 创建选择集 要创建选择集,可以使用图形软件提供的选择工具,如鼠标拖拽、框选等。选择集可以包含点…

    other 2023年10月15日
    00
  • 电脑任务栏假死点击没反应的解决方法(win7与xp)

    这里是电脑任务栏假死点击没反应的解决方法(Win7与XP)的完整攻略: 问题描述 在使用Windows 7或Windows XP时,有时候会出现电脑任务栏无法响应的情况,即在任务栏上点击应用程序没有任何反应。 解决方法 经过尝试和总结,我们可以通过以下步骤来解决电脑任务栏假死点击没反应的问题。 方法一:重启“开发服务” 步骤如下: 按下Win + R键,打开…

    other 2023年6月26日
    00
  • window 下 win10 jdk8安装与环境变量的配置过程

    下面是详细的步骤: 安装 JDK8 下载 JDK8 安装包,可以从 Oracle 官网下载,选择对应操作系统的安装包,下载链接:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 双击下载好的安装包,开始安装。根据提示一步一步进行安装即可。 安装完成之后,打开 …

    other 2023年6月27日
    00
  • 详细分析C++ 数据封装和数据抽象

    我们先来了解一下数据封装和数据抽象的概念。 数据封装是指将实现细节隐藏,仅暴露对外接口,归纳如下: 定义私有成员变量来放置数据,避免外界直接访问该变量 定义公有成员函数来访问私有成员变量,对外暴露接口 数据抽象是指将具体实现细节和概念分离,只呈现出必要的接口,归纳如下: 定义抽象类和纯虚函数来实现数据的抽象,将实际的实现交给子类 具体的实现过程如下: 定义类…

    other 2023年6月25日
    00
  • mysql中的case语句

    MySQL中的CASE语句 在MySQL中,CASE语句是一种非常有用的工具,可用于对表的数据进行简单的条件判断。CASE语句可以嵌套使用,以处理更加复杂的数据。本文将重点介绍在MySQL中如何使用CASE语句。 CASE语句的语法 CASE语句的语法非常简单,它由以下几部分组成: CASE expression WHEN value1 THEN resul…

    其他 2023年3月28日
    00
  • ssr服务端一键安装脚本

    SSR服务端一键安装脚本的完整攻略 SSR(ShadowsocksR)是一款基于Shadowsocks的增强版,提供了更加安全、稳定和高效的代理服务。在使用SSR时,我们需要在服务器上安装SSR服务端。本文将提供SSR服务端一键安装脚本的完整攻略,包括以下步骤: 下载SSR服务端一键安装脚本 运行SSR服务端一键安装脚本 配置SSR服务端 启动SSR服务端 …

    other 2023年5月9日
    00
  • win7系统下如何为python配置环境变量

    配置Python在Windows 7系统下的环境变量,主要有以下三个步骤: 查找Python安装路径 首先,需要确定自己安装Python的文件夹路径。可以通过以下两种方式来查找: 右键点击桌面上的Python(IDLE)的图标,选择“属性”; 在Python安装目录下,找到安装文件夹(默认情况下是C:\Python27)。 添加Python环境变量 打开控制…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部