Oracle sql, где столбец в подзапросе с параметром

Я хочу проверить, находятся ли значения параметра, разделенного запятой, в столбце.

Значение для: 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 02.05.2018 08:47

@dnoeth, спасибо, братан! вот что я ищу: D

Miracle 02.05.2018 09:00
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
128
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

возможно, превратите свой param_ в список и используйте список в своем предложении in

вы можете использовать такие функции, как string_split в where- where col in string_split (param_, ',');

Lihi 02.05.2018 09:11

возможное решение - поместить массив в VARCHAR:

Id_list VARCHAR2(500)= 'Hi,Hello,World';

SELECT col
  FROM tbl1
 WHERE INSTR(Id_list,col) > 0

Это вернет ИСТИНА для 'He', 'o,W' или ','.

dnoeth 02.05.2018 08:41
Ответ принят как подходящий

Вы можете использовать это:

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)

Другие вопросы по теме