Postgres의 WHERE에서 정규식 사용


81

현재 다음 쿼리가 있습니다.

select regexp_matches(name, 'foo') from table;

정규식이 다음과 같은 위치에 있도록 어떻게 다시 작성할 수 있습니까 (작동하지 않음).

select * from table where regexp_matches(name, 'foo');

현재 오류 메시지 : ERROR : WHERE의 인수는 text [] 유형이 아닌 부울 유형이어야합니다. SQL 상태 : 42804 문자 : 29

답변:


141

대신 작성하십시오.

select * from table where name ~ 'foo'

'~'연산자는 일치하는 하위 그룹을 추출하는 대신 정규식이 일치하는지 여부에 대한 부울 결과를 생성합니다.


2
~ 연산자에 대한 대안이 있습니까? 나는 쿼리를 구문 분석하는 자바 스크립트 라이브러리를 사용하고 있으며 불행히도 ~ 및 그 변형을 인식하지 못합니다.
Martin

@Martin 정규식 지원을 제거한 SIMILAR TO를 사용해 볼 수 있습니다. SELECT * FROM table WHERE name SIMILAR TO 'foo' 자세한 내용은 여기 문서 를 참조하십시오.
Josh Frankel

@JoshFrankel : 나는 비슷한 성능이 더 나쁜 어딘가에서 읽었습니다 (스택 오버플로에서 생각합니다).
Nina

@Nina 아마도, 나는 확실하지 않습니다. SIMILAR TO는 정규식 기능을 사용하지만 완전히 구현하지 않아 특별한 경우가되어 성능이 떨어집니다. 나는 선호한다~ 가 구현되는 무엇에 관한 놀라움하지 않으며 유사한 TO에 있기 때문에 어떤 아니므로 정규식 연산자
조쉬 프랭클

@JoshFrankel :이 사건은 어떻습니까? codereview.stackexchange.com/questions/221146/… 이것은 내가 최근에 게시 한 질문입니다
Nina

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.