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;
답변
빈 열을 NULL
s 로 처리해야하는 경우 다음을 시도하십시오.
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)