[postgresql] 문자열을 정수로 형변환-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>::character varying, '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을 반환합니다.


답변

이 쿼리를 사용할 수 있습니다.

SUM(NULLIF(conversion_units, '')::numeric)