sql - 为sql逗号分隔字符串中的每个单词插入引号并在Function SQL中使用
问题描述
我有一个这样的字符串:
@Values VARCHAR(1000)
SET @Values = 'one, two, three'
我想在WHERE
带有运算符的子句中使用此字符串IN
。
为此,我使用下表值函数。
ALTER FUNCTION [dbo].[FN_RPT_CommaSeperated]
(@StringInput VARCHAR(8000),
@Delimiter NVARCHAR(1))
RETURNS @OutputTable TABLE ( [String] VARCHAR(10) )
AS
BEGIN
DECLARE @String VARCHAR(10)
WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput) - 1, -1),
LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput), 0),
LEN(@StringInput)) + 1, LEN(@StringInput))
INSERT INTO @OutputTable ([String])
VALUES ('''' + @String + '''')
END
RETURN
END
此函数以预期的方式返回值。但是我的存储过程仍然没有按预期提供数据。
在我使用的存储过程中是这样的:
WHERE
TD.CaseId IN (SELECT * FROM [FN_RPT_CommaSeperated] (@Values,','))
无论如何,当我在存储过程中硬编码这样的值时,它都会返回预期的输出。
WHERE
TD.CaseId IN ('one', 'two', 'three')
任何想法如何使用该函数获取输出?
解决方案
自 SQL Server 2016 以来,SQL Server 中已经内置了一个表值函数。String_Split
DECLARE @Values VARCHAR(1000)
SET @Values = 'one, two, three'
SELECT value FROM STRING_SPLIT(@Values, ',');
您可以执行以下操作:
WHERE
TD.CaseId IN (SELECT value FROM STRING_SPLIT(@Values));
推荐阅读
- django - 为什么每次我重新部署时都会重置一些模型对象,并且在 Django Heroku 中经过一段时间后?
- unix - 在unix中将管道转换为管道分隔的csv文件中的双管道
- jwt - 在 Hasura Docker compose 中使用 claim_map 配置 JWT 机密的问题
- assembly - 为什么要在 MUL 之前保存函数参数寄存器 %rdx 的副本?
- jenkins - Bitnami jenkins 无法启动 LSB:bitnami 初始化脚本
- flutter - 无法使用 Get_it 在颤振中初始化 GraphQl 客户端
- python - 我正在尝试合并两个 CSV 文件并在 python 中使用 pandas 重新排列它们的列,但是在使用相同的列时遇到问题
- apache - 如何为子域配置 vhost.conf?
- sql-server - 使用 SSIS 动态地将表从源数据库传输到目标数据库的方法
- ios - 适用于 iOS 的 Atem Switcher SDK