玖叶教程网

前端编程开发入门

SQL Server中的字符串分割函数

您是否知道从SQL Server 2016开始,系统就内置STRING_SPLIT函数,该函数用于将字符串分隔的变量拆分为一个可用列表。 对于经常需要分割字符串的技术人员,建议您查看此功能。 STRING_SPLIT是一个表值函数,它返回由定界符分隔的字符串值的单个列。 这是T-SQL的不寻常之处,其使用要求兼容级别为130或更高(Microsoft不想引起对现有用户代码的重大更改)。 使用此方法效率更高,并且可以在不调用标量函数的情况下执行。

SQL Server系统内置分割函数

语法

STRING_SPLIT(字符串、分隔符)

如何使用它呢?

SELECT value AS 'Flavor' FROM STRING_SPLIT('Chocolate,Vanilla,Strawberry', ',');  

返回结果

执行计划是这样子的,它非常直接和简单。

自定义函数

这是在某些环境中可以找到的本地版本,您可以看到它的效率低得多。

****** Object:  UserDefinedFunction [dbo].[fnSplit]    Script Date: 7/11/2020 10:26:45 AM ******/  
SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
ALTER FUNCTION [dbo].[fnSplit](  
    @sInputList VARCHAR(8000) -- List of delimited items  
  , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items  
) RETURNS @List TABLE (item VARCHAR(8000))  
BEGIN  
DECLARE @sItem VARCHAR(8000)  
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0  
 BEGIN  
 SELECT  
@sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))  
 IF LEN(@sItem) > 0  
  INSERT INTO @List SELECT @sItem  
 END  
IF LEN(@sInputList) > 0  
 INSERT INTO @List SELECT @sInputList -- Put the last item in  
RETURN  
END  

结果

结果是一样的。但是请注意,您的字段名每次都是相同的,有了这个新函数,您在这方面获得了更多的灵活性。

执行计划

它比我们上面看到的包含序列的直接表达式要复杂一些。

有许多不同的方法可以编写这样一个分割函数,但是既然SQL Server已经提供了一个,我强烈建议您看看它。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言