SQLite는 비어있는 곳을 선택합니까?


125

SQLite에서 some_column이 비어있는 레코드를 어떻게 선택할 수 있습니까?
비어 있으면 NULL과 ""로 간주됩니다.


8
질문을 질문으로 표현하면 도움이됩니다. 우리는 무엇을 대답해야합니까?
javawizard

답변:


288

다음과 같은 여러 가지 방법이 있습니다.

where some_column is null or some_column = ''

또는

where ifnull(some_column, '') = ''

또는

where coalesce(some_column, '') = ''

where ifnull(length(some_column), 0) = 0

각 솔루션의 장점은 무엇입니까?
Pacerier

1
@Pacerier : 성능에는 약간의 차이가있을 수 있지만 그 외에는 스타일의 문제입니다.
Guffa

3
@Guffa 당연히 성능을 의미합니다 .. 이건 데이터베이스 죠? 최적화는 dbs에서 중요합니다. 약간의 성능 향상은 많이
Pacerier

4
length (some_column)은 즉시 길이를 계산할 수 있으므로 피해야합니다. AFAIK 현재 SQLite는 텍스트 선호도가있는 열에 대해 수행합니다. 그 외에는 옵티마이 저의 자비에 있습니다. EXPLAIN을 사용하여 확인할 수 있습니다.
peterchen 2012

@peterchen : 예, 옵티마이 저가하는 일에 따라 다릅니다. length숫자를 비교하는 것이 문자열을 비교하는 것보다 더 간단하기 때문에 어떤 상황에서는 실제로 더 빠를 수 있기 때문에 예제를 포함했습니다 . 그 성능이 문제라면 당연히 그것이 무엇을하는지 확인해야합니다.
Guffa 2011

27

간단히 할 수있는 것 같습니다.

SELECT * FROM your_table WHERE some_column IS NULL OR some_column = '';

테스트 케이스 :

CREATE TABLE your_table (id int, some_column varchar(10));

INSERT INTO your_table VALUES (1, NULL);
INSERT INTO your_table VALUES (2, '');
INSERT INTO your_table VALUES (3, 'test');
INSERT INTO your_table VALUES (4, 'another test');
INSERT INTO your_table VALUES (5, NULL);

결과:

SELECT id FROM your_table WHERE some_column IS NULL OR some_column = '';

id        
----------
1         
2         
5    

1

어쩌면 당신은 의미

select x
from some_table
where some_column is null or some_column = ''

하지만 당신이 정말로 질문하지 않았기 때문에 나는 말할 수 없습니다.


0

다음과 같이 할 수 있습니다.

int counter = 0;
String sql = "SELECT projectName,Owner " + "FROM Project WHERE Owner= ?";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, "");
ResultSet rs = prep.executeQuery();
while (rs.next()) {
    counter++;
}
System.out.println(counter);

이렇게하면 열 값이 null이거나 비어있는 행 수가 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.