문자열에 포함된 경우 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
'programing' 카테고리의 다른 글
git 내에서 파일 및 디렉터리가 수정된 경우 권한을 복원하는 방법은 무엇입니까? (0) | 2023.05.24 |
---|---|
Mongoose를 사용한 다대다 매핑 (0) | 2023.05.24 |
데이터베이스를 git(버전 제어) 아래에 배치하려면 어떻게 해야 합니까? (0) | 2023.05.24 |
정규식 옵션 문자를 일치시키는 방법 (0) | 2023.05.24 |
이클립스 패키지 탐색기에서 열려 있는 파일을 표시하려면 어떻게 합니까? (0) | 2023.05.24 |