문자열에 포함 된 경우 Postgresql SELECT
그래서 내 Postgresql에 있습니다.
TAG_TABLE
==========================
id tag_name
--------------------------
1 aaa
2 bbb
3 ccc
내 문제를 단순화하기 위해 문자열 "aaaaaaaa"에 'tag_name'이 포함 된 경우 TAG_TABLE에서 SELECT 'id'를 선택합니다. 따라서 이상적으로는 태그 이름 'aaa'의 ID 인 "1"만 반환해야합니다.
이것이 내가 지금까지하고있는 일입니다.
SELECT id FROM TAG_TABLE WHERE 'aaaaaaaaaaa' LIKE '%tag_name%'
그러나 postgres는 '% tag_name %'이 해당 열 아래의 실제 데이터 값 대신 하위 문자열 'tag_name'을 포함하는 패턴을 의미한다고 생각하기 때문에 이것은 작동하지 않습니다.
tag_name을 패턴에 어떻게 전달합니까 ??
따옴표 밖에 'tag_name'을 사용해야합니다. 그런 다음 레코드 필드로 해석됩니다. '||'를 사용하여 연결 문자 그대로 퍼센트 기호로 :
SELECT id FROM TAG_TABLE WHERE 'aaaaaaaa' LIKE '%' || tag_name || '%';
개인적으로 ~ 연산자의 더 간단한 구문을 선호합니다.
SELECT id FROM TAG_TABLE WHERE 'aaaaaaaa' ~ tag_name;
차이점 을 이해하기 위해 Postgres에서 LIKE와 ~의 차이점을 읽을 가치 가 있습니다. `
문자열을 검색하기위한 적절한 방법은 사용하는 것입니다 position
대신 기능을 like
탈출해야합니다 표현 %
, _
그리고 (이스케이프 문자 \
기본값) :
SELECT id FROM TAG_TABLE WHERE position(tag_name in 'aaaaaaaaaaa')>0;
용액과 더불어 'aaaaaaaa' LIKE '%' || tag_name || '%'
있다 position
(인수의 역순)와 strpos
.
SELECT id FROM TAG_TABLE WHERE strpos('aaaaaaaa', tag_name) > 0
더 효율적인 것 외에도 (LIKE가 덜 효율적으로 보이지만 인덱스가 상황을 변경할 수 있음) LIKE에는 매우 사소한 문제가 있습니다. 물론 tag_name 에는 오탐을 제공하지 않기 위해 %
특히 _
(단일 문자 와일드 카드) 포함해서는 안됩니다 .
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' 카테고리의 다른 글
OpenGL ES 대 OpenGL (0) | 2020.09.24 |
---|---|
Android : ScrollView가 스크롤을 중지 할 때 감지 (0) | 2020.09.24 |
오류 : "/ Users / username"디렉터리와 관련된 사전 설정 "es2015"를 찾을 수 없습니다. (0) | 2020.09.24 |
Ruby에 괄호를 넣거나 뺄 수 있습니까? (0) | 2020.09.24 |
SVN 저장소에서 파일 이름 검색 (0) | 2020.09.24 |