我想测试逗号分隔的参数中的值是否在列中。
值为:param_是这样的:
嗨,你好,世界
我希望我的查询在此查询中有一个结果:
SELECT col FROM tbl1
WHERE col IN ('Hi','Hello','World');
我试过了:
SELECT col FROM tbl1
WHERE col IN (
SELECT SUBSTR( SUBSTR('''' || REPLACE(:param_, ',', ''',''') || '''', 1,
LENGTH('''' || REPLACE(:param_, ',', ''',''') || '''') - 1), 2,
LENGTH( SUBSTR('''' || REPLACE(:param_, ',', ''',''') || '''', 1, LENGTH(''''
|| REPLACE(:param_, ',', ''',''') || '''') - 1) ) - 1 )
FROM tbl1);
我尝试的代码中的子查询输出 Hi','Hello','World 。我删除了第一个和最后一个单引号,因为我认为当它作为字符串输入时会有,并且在IN子句中'Hi','Hello','World'
答案 0 :(得分:1)
你可以用这个:
SELECT col
FROM tbl1
WHERE col IN (
SELECT regexp_substr(:param_, '[^,]+', 1, LEVEL)
FROM dual
CONNECT BY regexp_substr(:param_, '[^,]+', 1, LEVEL) IS NOT NULL
);
答案 1 :(得分:0)
可能会将您的param_转换为列表并使用您的in子句中的列表
答案 2 :(得分:0)
一种可能的解决方案是将数组放入VARCHAR:
Id_list VARCHAR2(500)= 'Hi,Hello,World';
SELECT col
FROM tbl1
WHERE INSTR(Id_list,col) > 0
答案 3 :(得分:0)
DECLARE
@string VARCHAR(100) = 'Hi,Hello,World',
@separator CHAR(1) = ',',
@value VARCHAR(MAX),
@start_position INT = 1,
@separatorPosition INT
DECLARE @result TABLE(value VARCHAR(MAX))
SET @separatorPosition = CHARINDEX(@separator, @string)
SET @string = @string + @separator
IF @separatorPosition = 0
BEGIN
INSERT INTO @result values(@string)
END
WHILE @separatorPosition > 0
BEGIN
SET @value = SUBSTRING(@string , @start_position, @separatorPosition - @start_position)
IF( @value <> '' )
INSERT INTO @result values(@value)
SET @start_position = @separatorPosition + 1
SET @separatorPosition = CHARINDEX(@separator, @string , @start_position)
END
SELECT value from @result
SELECT col FROM tbl1 WHERE col IN (SELECT value from @result)