정수 유형의 빈 필드를 선택하는 PostgreSQL


13

테이블이 있고 fk_fc_id필드 의 빈 값을 가진 모든 행을 선택해야 합니다 (삭제 전제 조건).

    Column     |            Type             |                         Modifiers
---------------+-----------------------------+------------------------------------------------------------
 di_timestamp  | timestamp without time zone |
 di_item_value | character varying(10)       |
 fk_fc_id      | integer                     |
 di_id         | integer                     | not null default nextval('data_item_di_id_seq1'::regclass)

그러나 이것은 작동하지 않습니다.

# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
                                                                    ^

노력도 효과 Null가 없습니다.

누군가 이것을 정렬하는 방법에 대한 제안이 있으면 매우 감사 할 것입니다.


1
fk_fc_id 선택 di_timestamp는 fk_fc_id가 null data_item에서 di_item_value은
foibs

2
PostgreSQL의 문자열에는 큰 따옴표가 사용되지 않습니다. 작은 따옴표는 문자열에 사용됩니다. 그러나 길이가 0 인 문자열을 정수와 비교해서는 안됩니다! 그리고 연산자 를 null사용 하여 값을 비교 =하면 항상 반환 null되어 해당 행이 제외됩니다.
Colin 't Hart

답변:


21

이것은 실제로 데이터베이스 관리와 관련이 없으며 PostgreSQL과 관련이 없지만 @foibs가 대답 했으므로 IS NULL을 살펴 봐야 합니다 .

 SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id IS NULL

1
아, 나는 Null이 아닌 = Null을 시도했습니다. 감사합니다
James

둘 다 (=; IS) 9.4에서 잘 작동
Petr

0

작은 따옴표를 사용해야합니다.

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''

기술적으로, SQL의 문자열은 작은 따옴표로 구분해야합니다. 그러나이 특정 경우 OP는 문제의 열이로 정의되어 있기 때문에 처음에는 문자열 (비어 있음)과 비교해서는 안됩니다 integer. 허용 된 답변 아래의 주석에서 읽을 수 있듯이 OP는 빈 문자열과 실제로 비교하는 방법을 찾지 못했기 때문에 빈 문자열과의 비교를 시도하기로 결정했습니다.
Andriy M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.