SQL 쿼리에서 int 또는 null을 부울 값으로 변환하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/177956

문제

SQL 쿼리에서 int 또는 null을 부울 값으로 변환하는 가장 좋은 방법은 다음과 같습니다.

  • 널이 아닌 값은 모든 것입니다 진실 결과에서
  • 모든 널 값은입니다 거짓 결과에서
도움이 되었습니까?

해결책

내가 아는 한 (내가 틀렸다면 나를 바로 잡으십시오), SQL에는 문자 부울 값의 개념이 없습니다. 부울 값을 평가하는 표현식을 가질 수 있지만 출력 할 수는 없습니다.

이것은 비교에서 사용할 수있는 값을 생성 할 때 케이스를 사용할 수 있습니다.

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 

다른 팁

용도가 필요하지 않습니다 ...시기 :

select (column_name is not null) as result from table_name;

NULL이 아닌 모든 필드에 대해 1을 반환하고 NULL 인 모든 필드의 경우 0을 반환합니다.

SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

나는 그것이 이런 일이 있다고 생각합니다

실제로, isnull은 값이 널이면 0이면 0이 될 수 있습니다.

당신이 0,1 값을 반품으로 원하고 우리가 정수에 대해 이야기하고 있다고 가정하면 나는 Torbjörn 그리고 그것을 함수로 감싸십시오

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end

그러면 단순히 전화를 통해 필요할 때마다 사용할 수 있습니다.

select dbo.isNotNull(myIntColumn) from myTable

제공 한 답변 토말락 모든 데이터 유형에서 작동 할 때 더 보편적입니다.

결과의 변환 (비트, 값)을 수행 할 수 있습니다. SQL이 값이 부울이 아니라는 오류를 반환하기 때문에.

isnull(column - column + 1, 0) != 0

Oracle에서, 당신이 false의 경우 0을 사용하고 true의 경우 1을 사용한다고 가정하면 :-

SELECT DECODE( col, NULL, 0, 1) FROM ...

Case Syntax를 사용하여 이것을 쓸 수도 있지만 위의 것은 Oracle에서 관용적입니다. 디코드는 스위치/케이스와 비슷합니다. col이 null이면 0이 반환되고, 그렇지 않으면 1.

오라클에 대해 내가 아는 가장 짧은 것 :

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) 보고 ifNotNull 만약 value NULL이 아닙니다 ifNull 그렇지 않으면.

일반적으로 1을 사용하는 경우, 그것은 사실이며 다른 경우에는 그렇습니다.

그래서:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top