나는 사람들의 테이블을 가지고 있습니다. 각 사람은 여러 개의 레지스트리를 가질 수 있습니다 (대부분 정수이지만 일부는 M/2344 및 W345와 유사합니다). 상황을 좀 더 복잡하게 만들기 위해 NULL, 빈 공간 및 'NA'와 같은 문자열이 있습니다. 예기치 않은 구성으로 인해 Regnum은 텍스트 배열 필드 (예 : {12345, M/2344} 및 {3459, NA})에 저장됩니다. 대부분의명는 정수로 처리 할 수 regnums이PostgreSQL 텍스트 배열 - 정수로 쿼리 (숫자 제외)
때문에 491555 및 491685. 나 '
, 말, 사이 regnum로 사람을 찾을처럼, 나는이 분야에 일을 할 수 있도록하고 싶습니다 해봤 :
SELECT id,forename,surname,regnum FROM (SELECT *, unnest(regnum) reg FROM people) as TBL WHERE reg BETWEEN '491555' AND '491685';
하지만 결과는 범위를 벗어난 regnums, 예를 들면 포함 49162.이 나는 중첩되지 regnum 필드가 여전히 텍스트 필드이기 때문에이 가정
또한 정수 필드로 regnum 캐스팅 시도했습니다 I - unnest(regnum::integer[])
- 그러나 나는 오류를 얻을 (?) : Error in query: ERROR: invalid input syntax for integer: "NA"
I을 내가 올바른 방향으로 가고 있다고 생각하지만, 비 int와 같은 regnum을 무시하는 법을 모르겠다. 어떤 아이디어?
postgresql에이 기능이 있는지는 잘 모르겠지만, 숫자 인 경우 열의 값이 테스트되는 select의 일부로 'CASE'를 테스트하려고합니다. 그렇다면 return 그렇지 않으면 매우 큰 숫자를 반환합니다 (범위에 포함되지 않거나 다른 제외 값). 이자형). – FDavidov
감사합니다. @FDavidov. 나는 그것이 CASE에 올 것이라고 생각했다. 그러나 나는 그것을 올바르게 이해할 수 없었다. – Greg