2016-07-14 4 views
0

내가 PostgreSQL을 9.4과 일치하는 정규식 패턴을 사용하려고 해요 :PostgreSQL의 9.4 UPDATE ... 정규식 사업자와 오류에서

이전 대답하지만 성냥이 특정 문제에

을 찾을 수 있습니다 아무것도를 통해 봤어 select 'apple' ~ '^.*pp.*$'은 't'를 예상대로 반환합니다.

update <table> set column = 'value' where name ~* '^.*pp.*$'도 작동합니다.

는하지만 :

update <table> set column = 'value' from <other_table> where name ~* '^.*pp.*$' 오류가 발생합니다 :

구체적인 예 :

update 
    members set 
    pattern = a.pattern 
    from 
    services a 
    where 
    organisation ~* '^.*' || replace(a.pattern, ' ', '.*') || '.*$'; 

ERROR : 유형 부울이어야 WHERE의 인수, 텍스트 LINE 1을 입력하지 .. .attern = a.pattern from services 어디에서 조직입니까?

■ 업데이트의 FROM 테이블이 정규식 연산자를 올바르게 인식하지 못하거나 처리하지 못하는 경우 where 절을 사용합니다. 또는 동등 아마, 나는 UPDATE를 오해하고있어 ... 구문 FROM

많은 감사를 당신이 문자열 식의 주위에 괄호를 누락

답변

1

을 도울 수 있다면. 이 연산자 (~||)는 우선 순위가 같으며 왼쪽부터 계산됩니다.

 
postgres=# update foo set b = a where a ~ 'ab'; 
UPDATE 1 
postgres=# update foo set b = a where a ~ 'ab' || 'xxxx'; 
ERROR: argument of WHERE must be type boolean, not type text 
LINE 1: update foo set b = a where a ~ 'ab' || 'xxxx'; 
           ^
postgres=# update foo set b = a where a ~ ('ab' || 'xxxx'); 
UPDATE 0 
+0

우수. 많은 감사합니다. 나는 이전에 괄호를 사용 했었지만, 어디에서 (조직 ...) –