복붙노트

[SQL] SQL 서버 - 부울 리터럴?

SQL

SQL 서버 - 부울 리터럴?

어떻게 SQL Server의 문자 부울 값을 작성하는? 샘플 사용을 참조하십시오 :

select * from SomeTable where PSEUDO_TRUE

또 다른 샘플 :

if PSEUDO_TRUE
begin
  select 'Hello, SQL!'
end 

참고 : 위의 쿼리는 내가 그것을 사용하는거야 방법과는 아무 상관이 없습니다. 그것은 단지 리터럴 부울을 테스트하는 것입니다.

해결법

  1. ==============================

    1.SQL Server는 부울 데이터 형식이 없습니다. @Mikael가 나타내는 바와 같이, 가장 가까운 근사 비트이다. 하지만 그 숫자 형이 아닌 부울 유형입니다. 0 또는 1 (하나의 비 값, NULL) - 또한, 단지 2 개 개의 값들을 지원한다.

    SQL Server는 부울 데이터 형식이 없습니다. @Mikael가 나타내는 바와 같이, 가장 가까운 근사 비트이다. 하지만 그 숫자 형이 아닌 부울 유형입니다. 0 또는 1 (하나의 비 값, NULL) - 또한, 단지 2 개 개의 값들을 지원한다.

    SQL (표준 SQL뿐만 아니라 T-SQL 방언)는 3 치 논리를 설명합니다. TRUE, FALSE와 UNKNOWN (또한, 비 값 NULL) - SQL의 부울 타입 3 개 값을 지원한다. 비트는 실제로 여기에 좋은 경기를하지 않습니다 그래서.

    SQL Server가 데이터 유형을 지원하지 않는다는 점을 감안할 때, 우리는 "유형"의 리터럴을 쓸 수 있기를 기대는 안된다.

  2. ==============================

    2.

    select * from SomeTable where 1=1
    
  3. ==============================

    3.이것은 다른 답변의에서 언급되지 않습니다. 당신은 ORMS (해야) 수화물 사용할 수있는 부울하는 값을 원하는 경우

    이것은 다른 답변의에서 언급되지 않습니다. 당신은 ORMS (해야) 수화물 사용할 수있는 부울하는 값을 원하는 경우

    CONVERT (비트 0) - 거짓 CONVERT (비트, 1) - 참

    이렇게하면 부울이 아닌 비트를 제공합니다. 당신은 예를 들어 if 문에 그 값을 사용할 수 없습니다 :

    IF CONVERT(bit, 0)
    BEGIN
        print 'Yay'
    END
    

    구문 분석 할 수 없습니다. 당신은 여전히 ​​쓰기에 필요

    IF CONVERT(bit, 0) = 0
    

    그 정말 유용하지 그래서.

  4. ==============================

    4.대부분의 데이터베이스는 이것을 받아 들일 것입니다 :

    대부분의 데이터베이스는 이것을 받아 들일 것입니다 :

    select * from SomeTable where true
    

    그러나 일부 데이터베이스 (예 : SQL 서버, 오라클)는 부울 유형이 없습니다. 이러한 경우에는 사용할 수 있습니다 :

    select * from SomeTable where 1=1
    

    BTW, 손으로 절, 이것은 당신이 절은 선행해야 할 첫 번째는 (여기서 당신에 대해있는 조건이 추가 할 수 있는지 알고 것을 방지 할 수 있기 때문에 코드를 단순화의 기초가있는 SQL을 구축하는 경우 "WHERE") 또는 "AND"에 선행되어야 후속하는 하나 (). 항상 "WHERE 1 = 1"로 시작하여, where 절에 추가 된 모든 조건 (있는 경우) "AND"로 시작된다.

  5. ==============================

    5.마이크로 소프트에 따르면 : 검색을위한 구문은

    마이크로 소프트에 따르면 : 검색을위한 구문은

    [ WHERE <search_condition> ]*
    

    그리고 검색 조건은 다음과 같습니다

    <search_condition> ::= 
        { [ NOT ] <predicate> | ( <search_condition> ) } 
        [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] 
    [ ,...n ] 
    

    그리고 조건은 다음과 같습니다

    <predicate> ::= 
        { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression 
    

    당신이 볼 수 있듯이, 당신은 항상 비교하는 두 식을 작성해야합니다. 검색 조건은 (1) = (1),! = B 등 부울 표현식은

    혼동 '참'또는 '거짓'와 같은 부울 상수 식을 검색하지 마십시오. 당신은 BIT 변수에 부울 상수를 할당 할 수 있습니다

    DECLARE @B BIT
    SET @B='True'
    

    그러나 TSQL에서 대신이 같은 불리언 표현식의 부울 상수를 사용할 수 없습니다 :

    SELECT * FROM Somewhere WHERE 'True'
    

    이거 작동 안 할거야.

    그러나이 같은 양면 검색 식을 구축하는 부울 상수를 사용할 수 있습니다 :

    SEARCH * FROM Somewhere WHERE 'True'='True' 
    
  6. ==============================

    6.SQL Server는 문자 그대로 true 또는 false 값이 없습니다. 당신이 필요한 드문 경우에 1 = 1 개 방식 (또는 유사)를 사용해야합니다.

    SQL Server는 문자 그대로 true 또는 false 값이 없습니다. 당신이 필요한 드문 경우에 1 = 1 개 방식 (또는 유사)를 사용해야합니다.

    하나의 옵션은 진실과 거짓에 대한 자신라는 이름의 변수를 생성하는 것입니다

    DECLARE @TRUE bit
    DECLARE @FALSE bit
    SET @TRUE = 1
    SET @FALSE = 0
    
    select * from SomeTable where @TRUE = @TRUE
    

    그러나이 단지 배치의 범위 내에 존재한다 (당신은 당신이 그들을 사용하고자하는 모든 일괄 처리를 재 선언해야합니다)

  7. ==============================

    7.당신은 값 'TRUE'와 'FALSE'를 사용할 수 있습니다. https://docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql에서 :

    당신은 값 'TRUE'와 'FALSE'를 사용할 수 있습니다. https://docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql에서 :

  8. ==============================

    8.그와 같은 일은 없다.

    그와 같은 일은 없다.

    당신은 당신이 SQL Server에서 부울 값을 얻는 가장 가까운 비트입니다 .... 같은> <=를 사용하여 뭔가 값을 비교해야합니다. 그리고는 0과 1의 값에 널 (null)을 가질 수의 정수이다.

  9. ==============================

    9.당신은 "진정한 가치는"0뿐만 아니라 1을 제외한 모든 것을 고려해야한다. 그래서 그 대신 1 = 1을 사용하면 1 <> 0을 작성해야합니다.

    당신은 "진정한 가치는"0뿐만 아니라 1을 제외한 모든 것을 고려해야한다. 그래서 그 대신 1 = 1을 사용하면 1 <> 0을 작성해야합니다.

    당신이 매개 변수 (파라미터 : <> 0)를 사용할 때 때문에 일부 변환 문제가있을 수 있습니다.

    가장 알고는 -1 대신 1 제어에 진정한 가치를 번역하는 접근이다.

  10. ==============================

    10.나는 TSQL에서 부울을 사용하여 값을 질문입니다. 내가 부울에 대한 & 루프를 들어 원하는 시작했습니다 때마다 나는 C 프로그래머 및 아닌 SQL 프로그래머와 같은 문제에 접근했다 깨달았다. 나는 기어를 전환 할 때 문제가 사소한되었다.

    나는 TSQL에서 부울을 사용하여 값을 질문입니다. 내가 부울에 대한 & 루프를 들어 원하는 시작했습니다 때마다 나는 C 프로그래머 및 아닌 SQL 프로그래머와 같은 문제에 접근했다 깨달았다. 나는 기어를 전환 할 때 문제가 사소한되었다.

    SQL에서는 데이터 집합을 조작한다. "BOOLEAN가 WHERE"효과가, 같은 작업중인 설정을 변경하지 않습니다. 필터 절은 효과적 일 수 있도록 당신은 뭔가 각 행을 비교해야합니다. 테이블 / 결과 집합은 IEnumerable을하고, SELECT 문은 foreach 루프입니다.

    "IsAdmin = TRUE가 WHERE"좋네요 예 "WHERE IsAdmin = 1"보다 읽기

    예, "WHERE 진정한"보다 더 좋은 것 "WHERE 1 = 1, ..."동적 SQL을 생성 할 때.

    어쩌면, proc 디렉토리에 저장에 부울을 전달하는 if 문이 읽기 쉽게 만들 수 있습니다.

    그러나 대부분의 당신이 당신의 TSQL에있는의, WHILE의 및 임시 테이블은 더 많은 가능성이 당신이 그것을 리팩토링해야 더 많은 경우.

  11. ==============================

    11.나는이 질문의 의도 답변이 되었기를 바랍니다. SQL 서버에는 부울은 없지만, 당신은 Access에서 번역 된 부울 유형을 가진 데이터베이스, Access에서 작동하는 문구가있는 경우였다 "... 푸 WHERE"(푸 부울 열 이름입니다). 그것은 "... WHERE 푸 <> 0"...이 작품을 교체 할 수 있습니다. 행운을 빕니다!

    나는이 질문의 의도 답변이 되었기를 바랍니다. SQL 서버에는 부울은 없지만, 당신은 Access에서 번역 된 부울 유형을 가진 데이터베이스, Access에서 작동하는 문구가있는 경우였다 "... 푸 WHERE"(푸 부울 열 이름입니다). 그것은 "... WHERE 푸 <> 0"...이 작품을 교체 할 수 있습니다. 행운을 빕니다!

  12. ==============================

    12.당신은 시뮬레이션 부울 유형의 데이터에 대한 '참'또는 '거짓'문자열을 사용할 수 있습니다.

    당신은 시뮬레이션 부울 유형의 데이터에 대한 '참'또는 '거짓'문자열을 사용할 수 있습니다.

    Select *
    From <table>
    Where <columna> = 'True'
    

    나는 아마 느린가 Convert_implicit 기능을 해결 있기 때문에 단지 하나를 넣어보다이 방법을 생각한다.

  13. ==============================

    13.

    select * from SomeTable where null is null
    

    또는

    select * from SomeTable where null is not null
    

    어쩌면이 최적의 성능은?

  14. from https://stackoverflow.com/questions/7170688/sql-server-boolean-literal by cc-by-sa and MIT license