programing

문자열에 포함된 경우 Postgresql 선택

oldcodes 2023. 5. 24. 22:22
반응형

문자열에 포함된 경우 Postgresql 선택

그래서 Postgresql에 a가 있습니다.

TAG_TABLE
==========================
id            tag_name       
--------------------------
1             aaa
2             bbb
3             ccc

문제를 단순화하기 위해 문자열 "aaaaaaaaaaaaaa"에 'tag_name'이 포함된 경우 TAG_TABLE에서 'id'를 선택합니다.따라서 이상적으로는 태그 이름 'aaa'의 ID인 "1"만 반환해야 합니다.

지금까지 제가 하고 있는 일은 다음과 같습니다.

SELECT id FROM TAG_TABLE WHERE 'aaaaaaaaaaa' LIKE '%tag_name%'

그러나 포스트그레스는 '%tag_name%'가 해당 열 아래의 실제 데이터 값이 아닌 하위 문자열 'tag_name'을 포함하는 패턴을 의미한다고 생각하기 때문에 이것은 분명히 작동하지 않습니다.

tag_name을 패턴에 전달하려면 어떻게 해야 합니까?

사용해야 합니다.tag_name따옴표 밖에서 레코드 필드로 해석됩니다.다음을 사용하여 연결'||'문자 그대로 백분율 기호 사용:

SELECT id FROM TAG_TABLE WHERE 'aaaaaaaa' LIKE '%' || tag_name || '%';

그리고 기억하세요.LIKE대소문자를 구분합니다.대소문자를 구분하지 않는 비교가 필요한 경우 다음을 수행할 수 있습니다.

SELECT id FROM TAG_TABLE WHERE 'aaaaaaaa' LIKE '%' || LOWER(tag_name) || '%';

하위 문자열을 검색하는 적절한 방법은 다음과 같습니다.position대신 기능합니다.like이스케이프가 필요한 식%,_및 이스케이프 문자(\기본값):

SELECT id FROM TAG_TABLE WHERE position(tag_name in 'aaaaaaaaaaa')>0;

저는 개인적으로 더 간단한 구문을 선호합니다.~교환입니다.

SELECT id FROM TAG_TABLE WHERE 'aaaaaaaa' ~ tag_name;

Postgres에서 LIKE와 ~ 차이를 읽어 그 차이를 이해할 가치가 있습니다.`

다음을 포함하는 것 외에도'aaaaaaaa' LIKE '%' || tag_name || '%'있다position(args의 추가 순서) 및strpos.

SELECT id FROM TAG_TABLE WHERE strpos('aaaaaaaa', tag_name) > 0

더 효율적인 것 외에도(LIKE가 덜 효율적으로 보이지만 인덱스가 상황을 바꿀 수 있음) LIKE에는 매우 사소한 문제가 있습니다. tag_name office는 당연히 포함해서는 안 됩니다.%특히_(단일 문자 와일드카드), 잘못된 긍정을 제공하지 않습니다.

SELECT id FROM TAG_TABLE WHERE 'aaaaaaaa' LIKE '%' || "tag_name" || '%';

tag_name따옴표로 묶어야 합니다. 그렇지 않으면 tag_name이(가) 존재하지 않기 때문에 오류가 발생합니다.

언급URL : https://stackoverflow.com/questions/23320945/postgresql-select-if-string-contains

반응형