이것이 SQL에서 부울 테스트를 수행하는 적절한 방법입니까?


81

활성이 "부울 필드"라고 가정합니다 (작은 정수, 0 또는 1 포함).

# Find all active users
select * from users where active 

# Find all inactive users
select * from users where NOT active 

즉, "NOT"연산자를 부울 필드에 직접 적용 할 수 있습니까?


게시 된대로 예, 부울 필드는 일반적으로 '비트'가 아닌 'INT'입력된다
데이비스

"active = 0"이 가능한 해결 방법이라는 것을 알고있을 것이기 때문에 정말 멋진 코드를 사용하고 있다고 가정합니다. "NOT active"와 "active = 0"중에서 선택할 때 신경 쓰지 않을 것입니다. 반드시 설명해야하는 경우 주석을 추가하십시오. (앞으로 코드로 작업하는 누군가가 참 / 거짓 <-> 1/0 관계를 이해하지 못하는 경우, 누군가가 코드를 건드리지 말아야 할 수도 있습니다. btw ...)
Tomas Aschan

1
@Eric : SQL에서 조건자는 부울 결과를 생성해야합니다. "활성 위치"는 이러한 결과를 생성하지 않습니다. '활성'이 BIT 데이터 유형 인 경우에도 BIT는 부울 값이 아니고 범위가 0..1 인 정수 값이기 때문입니다. 따라서 부울을 생성하려면 일종의 비교를 수행 해야합니다 . "where NOT (active = 1)"은 작동하지만 "where NOT active"는 작동하지 않습니다.
Tomalak

Tomalak-그 댓글을 답변으로 게시 했어야합니다!
womp

@Tomalak : "SQL에서 술어는 부울 결과를 생성해야합니다."-그렇지 않습니다. SQL은 TRUE, FALSE 및 UNKNOWN의 세 가지 값 논리를 표시합니다 ( 'active'가 NULL 일 수 있음을 고려).
onedayWhen

답변:


88

SQL의 부울은 비트 필드입니다. 이는 1 또는 0을 의미합니다. 올바른 구문은 다음과 같습니다.

select * from users where active = 1 /* All Active Users */

또는

select * from users where active = 0 /* All Inactive Users */

14
@ JoseBasilio- PostgreSQL 제외 : postgresql.org/docs/9.1/static/datatype-boolean.html
Yarin

대부분의 DB에서 필드는 NULL 일 수도 있습니다. 활성 필드에 대한 기본값으로 테이블을 구성하지 않은 경우에도 NULL을 확인해야 할 수 있습니다.
IAmNaN

Rails (4) 내에서 SQLite를 사용하여 'f'또는 't'(문자는 아님)를 사용하여 쿼리했습니다. 위의 쿼리를 사용할 때 작동하지 않았습니다. 하지만 : SELECT “model".* FROM “model" WHERE “boolean_column" = ‘f'
했음

25

Postgres를 사용하면 다음을 사용할 수 있습니다.

select * from users where active

또는

select * from users where active = 't'

정수 값을 사용하려면 문자열로 간주해야합니다. 정수 값을 사용할 수 없습니다.

select * from users where active = 1   -- Does not work

select * from users where active = '1' -- Works 

그것이 참인지 참인지 아니면 1인지 찾기 위해 모든 것을 살펴 보았 기 때문에 귀하의 답변은 매우 도움이되었습니다
jpw

4
+1 PostgreSQL 부울 옵션에 대한 추가 정보 : postgresql.org/docs/9.1/static/datatype-boolean.html
Yarin 2014 년

1
또한 Posgtres는 OP의 구문 where active, where not active. postgresql.org/docs/8.2/static/functions-logical.html
Loïc Faugeron

13

MS SQL 2008은 true 또는 false의 문자열 버전을 사용할 수도 있습니다.

select * from users where active = 'true'
-- or --
select * from users where active = 'false'

와우, 멋지네요 ... 나는 그것이 작동하는지 몰랐지만 내 테스트에서 2008+에서 확실히 작동합니다.
Maxim Gershkovich

12

SQL Server에서는 일반적으로 사용합니다. 다른 데이터베이스 엔진에 대해 잘 모릅니다.

select * from users where active = 0

3

개인적으로 부울에 대한 기본 유형이없는 데이터베이스의 경우 'Y'및 'N'값으로 char (1)을 사용하는 것을 선호합니다. 문자는 문자를 읽는 사람들이 이제 1이 참에 해당하고 0이 거짓에 해당한다고 가정하는 숫자보다 더 사용자가 선호합니다.

'Y'와 'N'은 (N) Hibernate를 사용할 때도 잘 매핑됩니다.


0

PostgreSQL은 부울 유형을 지원하므로 SQL 쿼리는 PostgreSQL에서 완벽하게 작동합니다.


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