sql - sql将字符串拆分为始终相同数量的片段
问题描述
我需要使用分隔符将字符串分成几部分(例如,)
在任何情况下,我都需要相同的块数,如果文本太短,函数应该返回空字符串。
我想将其存储为标量函数,因为与表值函数相比,在需要的地方使用它更好。
我正在寻找像 myFunction (inputstring, chunknumber) 这样的函数
例如:输入字符串 = abc, def, ghi
预期的样本结果:
myFunction (inputstring, 1) --> 'abc'
myFunction (inputstring, 3) --> 'ghi'
myFunction (inputstring, 5) --> ''
解决方案
在 SQL Server 中,您可以使用以下用户定义函数:
CREATE FUNCTION [dbo].[myFunction]
(
@String VARCHAR(MAX),
@ChunkNumber INT
)
RETURNS VARCHAR (100)
AS
BEGIN
DECLARE @Incrementer AS INT = 1;
DECLARE @SliceValue VARCHAR(MAX);
DECLARE @Delimiter AS CHAR(1) = ',';
DECLARE @ReturnObject AS VARCHAR (100) = '';
DECLARE @SplitedValues TABLE (Id INT IDENTITY NOT NULL, Item VARCHAR (100));
IF LEN(@String) < 1 OR @String IS NULL
RETURN @ReturnObject
WHILE @Incrementer != 0
BEGIN
SET @Incrementer = CHARINDEX(@Delimiter, @String);
IF @Incrementer != 0
SET @SliceValue = LEFT(@String, @Incrementer - 1)
ELSE
SET @SliceValue = @String
IF(LEN(@SliceValue) > 0)
INSERT INTO @SplitedValues(Item) VALUES (@SliceValue)
SET @String = RIGHT(@String, LEN(@String) - @Incrementer)
IF LEN(@String) = 0 BREAK
END
SELECT @ReturnObject = Item FROM @SplitedValues WHERE Id = @ChunkNumber;
RETURN @ReturnObject
END
示例执行:
SELECT [dbo].[myFunction] ('abc, def, ghi', 5) -- returns empty
SELECT [dbo].[myFunction] ('abc, def, ghi', 3) -- returns ghi
SELECT [dbo].[myFunction] ('abc, def, ghi', 1) -- returns abc
推荐阅读
- node.js - 使用 NextJS API 发送文件作为响应
- angular - @agm/core 和 @angular/google-maps 谷歌地图有什么区别
- shell - 詹金斯——睡眠:找不到命令
- javascript - 在 Javascript 函数中嵌套事件
- javascript - 引导带中的下拉不起作用 - 在控制台中显示 popper.js
- jenkins - 我们如何选择在 Active Choice Reactive Reference Parameter 中输入文本输入并能够在其 groovy 脚本中读取文件参数?
- python - 如何解决 Python 3 中的这个缩进错误?
- xml - 如何删除除少数特定空标签外的空 xml 元素
- python - 如何将给定文本文件中从元音开始的单词写入另一个文本文件?
- kotlin - 为什么返回:kotlin.Unit