sql [sql]将逗号分隔的字符串转换为sql(或)查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql [sql]将逗号分隔的字符串转换为sql(或)查询相关的知识,希望对你有一定的参考价值。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[func_SplitStringReturnSql]
(
  @ArrayString NVARCHAR(50),
  @FieldName NVARCHAR(30),
  @FieldType NVARCHAR(10)
)
RETURNS NVARCHAR(255)
AS
BEGIN

DECLARE @Sql VARCHAR(255)
DECLARE @StartPos INT
DECLARE @EndPos INT
DECLARE @Delimiter VARCHAR(1)
DECLARE @SplitVal NVARCHAR(10)

SET @Sql = ''
SET @Delimiter = ','
SET @StartPos = 0
SET @EndPos = CHARINDEX(@Delimiter, @ArrayString, @StartPos)

-- !!! Array string needs to end with the seperator character to work right !!!
--------------------------------------------------------------------------------
WHILE ((@EndPos > 0) And (@StartPos < LEN(@ArrayString)))
BEGIN
	SET @SplitVal = CONVERT(NVARCHAR(10), LTRIM(RTRIM(SUBSTRING(@ArrayString, @StartPos, @EndPos - @StartPos))))
	IF (@StartPos > 0)
	BEGIN
		SET @Sql += ' OR '
	END
	IF (@FieldType = 'int')
	BEGIN
		SET @Sql += @FieldName + '=' + CONVERT(NVARCHAR(10), @SplitVal)
	END
	IF (@FieldType = 'char')
	BEGIN
		SET @Sql += @FieldName + '=''' + CONVERT(NVARCHAR(10), @SplitVal) + ''''
	END
	SET @StartPos = @EndPos + LEN(@Delimiter)
	SET @EndPos = CHARINDEX(@Delimiter, @ArrayString, @StartPos)
END

RETURN 
(
  SELECT @Sql
)
END
DECLARE @AgeGroupArray NVARCHAR(50)
SET @AgeGroupArray = 'x,y,'

IF (LEN(@AgeGroupArray) > 0)
BEGIN
  SET @SqlString = @SqlString + N'AND (' + 
    [dbo].[func_SplitStringReturnSql](@AgeGroupArray, '[P].[AgeGap]', 'char') + 
    N') '
END

-- RETURNS:
-- [P].[AgeGap]='x' OR [P].[AgeGap]='y'

以上是关于sql [sql]将逗号分隔的字符串转换为sql(或)查询的主要内容,如果未能解决你的问题,请参考以下文章

mssql sqlserver sql对使用逗号分隔的字符串 转换为数据表的另类方法实现

T-SQL -- 将逗号分隔的列转换为多列

SQL中逗号分隔的查询结果转换成单个字符串放到in语句里

SQL:使用 SQL 将两个逗号分隔的字符串拆分为单独的索引行

如何在 Azure Databricks SQL 中将字段值转换为逗号分隔

sql 将逗号分隔的字符串拆分为值列表(返回游标)