Я хочу проверить, находятся ли значения параметра, разделенного запятой, в столбце.
Значение для: 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);
Подзапрос в коде, который я пробовал, имеет вывод Привет, Привет, Мир. Я удалил первую и последнюю одинарную кавычку, потому что думал, что она будет, когда будет введена как строка, и будет «Привет», «Привет», «Мир» в предложении IN
@dnoeth, спасибо, братан! вот что я ищу: D
возможно, превратите свой param_ в список и используйте список в своем предложении in
вы можете использовать такие функции, как string_split в where- where col in string_split (param_, ',');
возможное решение - поместить массив в VARCHAR:
Id_list VARCHAR2(500)= 'Hi,Hello,World';
SELECT col
FROM tbl1
WHERE INSTR(Id_list,col) > 0
Это вернет ИСТИНА для 'He'
, 'o,W'
или ','
.
Вы можете использовать это:
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
);
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)
Просто найдите разделенная запятыми строка оракула и выберите один из ответов.