Programming

타입 캐스트 문자열을 정수로-Postgres

procodes 2020. 7. 28. 22:07
반응형

타입 캐스트 문자열을 정수로-Postgres


Varchar에 원시 피드가있는 테이블에서 데이터를 가져오고 있는데 varchar의 열을 문자열 열로 가져와야합니다. 나는 <column_name>::integer뿐만 아니라 사용하려고 시도했지만 to_number(<column_name>,'9999999')몇 개의 빈 필드가 있으므로 새 테이블에서 빈 필드 또는 null로 필드를 검색해야합니다.

같은 기능이 있는지 알려주세요.


거친 추측 : 값이 빈 문자열이면 NULLIF를 사용하여 NULL로 바꿀 수 있습니다.

SELECT
    NULLIF(your_value, '')::int

더 나아가서 다음과 같은 합쳐진 분야를 제한 할 수도 있습니다.

SELECT CAST(coalesce(<column>, '0') AS integer) as new_field
from <table>
where CAST(coalesce(<column>, '0') AS integer) >= 10; 

빈 열을 NULLs 로 처리 해야하는 경우 다음을 시도하십시오.

SELECT CAST(nullif(<column>, '') AS integer);

반면 NULL에 피해야 할 값이 있으면 다음을 시도하십시오.

SELECT CAST(coalesce(<column>, '0') AS integer);

동의합니다. 오류 메시지가 많은 도움이 될 것입니다.


NULL 또는 특수 문자 또는 빈 문자열로 인해 오류가 발생하지 않는 유일한 방법은 다음과 같습니다.

SELECT REGEXP_REPLACE(COALESCE(<column>, '0'), '[^0-9]*' ,'0')::integer FROM table

Lukas의 게시물에 대해 언급 할 수 없습니다 (너무 평판이 적습니까? 저는 꽤 새롭습니다).

내 PG 설정에서 to_number(NULL)작동하지 않으므로 내 해결책은 다음과 같습니다.

SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END
FROM table

값에 숫자가 아닌 문자가 포함 된 경우 다음과 같이 값을 정수로 변환 할 수 있습니다.

SELECT CASE WHEN <column>~E'^\\d+$' THEN CAST (<column> AS INTEGER) ELSE 0 END FROM table;

CASE 연산자는 <column>을 검사하고, 정수 패턴과 일치하면 비율을 정수로 변환하고, 그렇지 않으면 0을 리턴합니다.

참고 URL : https://stackoverflow.com/questions/10518258/typecast-string-to-integer-postgres

반응형