안녕에 작은 따옴표 쉼표 쉼표를 교체하는 방법 나는이있는 모든 곳에 나는 그들이 ('1,2,3')
아래에 있지만 실행하는 것처럼 표시 매개 변수에 값을 통과 할 때SQLIN 절
select * from table1
where colum1 IN (?parameter)
아래 같은 절 값을 ('1','2','3')
으로 변경해야하는 쿼리는 IN 절의 쉼표를 작은 따옴표 쉼표로 직접 바꿀 수있는 방법입니까?
안녕에 작은 따옴표 쉼표 쉼표를 교체하는 방법 나는이있는 모든 곳에 나는 그들이 ('1,2,3')
아래에 있지만 실행하는 것처럼 표시 매개 변수에 값을 통과 할 때SQLIN 절
select * from table1
where colum1 IN (?parameter)
아래 같은 절 값을 ('1','2','3')
으로 변경해야하는 쿼리는 IN 절의 쉼표를 작은 따옴표 쉼표로 직접 바꿀 수있는 방법입니까?
이 like
를 사용하여 당신이 원하는 것을 할 수있는 하나의 해킹입니다 :
select *
from table1
where ',' || column1 || ',' like '%,' || (?parameter) || ',%';
이 기능을하지만 column1
에 인덱스를 사용하지 않습니다. 다음과 같은 다른 솔루션에 대해 생각해보십시오.
in
을 고정 된 수의 매개 변수와 함께 사용하십시오.다른 Oracle 관련 솔루션도있을 수 있습니다.
"Hack"은 너무 강한 단어입니다. 물론 옵티마이 저가 아무 것도 할 수 없지만 성능상의 문제가 발생하지 않거나 그렇게하지 않을 수도 있습니다. 이 접근 방식에 대한 좋은 점은 (지금도 제안하려고했던) 기능 *을 제공한다는 것입니다. 따라서 다른 것들을 제공 할 수 있습니다. – Bohemian
MS SQL을 사용하면 테이블 값으로 변환하고 조건에 따라 조인을 사용할 수 있습니다. 오라클에 익숙하지 않지만 같은 방법으로 찾을 수 있습니다.
DECLARE @IDs varchar(max) ='1,2,3';
;WITH Cte AS
(
SELECT
CAST('<ID>' + REPLACE(@IDs, ',' , '</ID><ID>') + '</ID>' AS XML) AS IDs
)
SELECT '''' + Split.a.value('.', 'VARCHAR(100)') +'''' AS ID FROM Cte
CROSS APPLY Cte.IDs.nodes('/ID') Split(a)
with 절을 사용하여 구현할 수 있습니다. 여기서 논리는 각 쉼표로 구분 된 값을 다른 행으로 변환하는 것입니다.
with temp_tab as (
select replace(regexp_substr(parameter, '[^,]+',1, level),'''','') as str
from dual
connect by level<= length(regexp_replace(parameter, '[^,]+'))+1)
select * from table1 where column1 in (select str from temp_tab);
이렇게하는 간단한 방법은 없습니다. 당신이 생각하고있는 것은 입력 문자열을 여러 개의 개별 문자열로 된 목록 (컬렉션, 배열, 원하는대로 호출)이 아닌 다른 단일 문자열로 바꿀 것입니다. "입력 문자열을 개별 토큰으로 분할해야합니다. 이 사이트에서 "split csv"에 대한 내용을 읽으십시오. 질문은 여러 번 묻습니다. – mathguy
나는 Oracle과 잘 어울리지 않지만, 이것과 같은 것이 아닙니까? [쉼표로 구분 된 문자열을 분리하고 select 문의 IN 절로 전달하는 방법] (https://blogs.oracle.com/aramamoo/entry/how_to_split_comma_separated_string_and_pass_to_in_clause_of_select_statement) –