[sql] SQL Select 문에서 부울 값 반환

SQL Select 문에서 부울 값을 반환하는 방법은 무엇입니까?

나는이 코드를 시도했다 :

SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)

그리고 그것은 단지 반환 TRUEUserID 테이블에 존재하는 경우 합니다. 나는 그것을 반환 할 FALSE(가) 경우 UserID테이블에 존재하지 않습니다.



답변

사용자가 존재하지 않으면 가지고있는 것은 전혀 행을 반환하지 않습니다. 필요한 것은 다음과 같습니다.

SELECT CASE WHEN EXISTS (
    SELECT *
    FROM [User]
    WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END


답변

이 라인을 따라 뭔가 :

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;

http://sqlfiddle.com/#!3/5e555/1


답변

주어진 일반적으로 1 = true0 = false 행 수를 계산하고로 캐스팅하기 만하면됩니다 boolean.

따라서 게시 된 코드에는 COUNT()추가 된 기능 만 필요합니다 .

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)


답변

0 또는 1을 반환하는 ‘Exists’를 사용하십시오.

쿼리는 다음과 같습니다.

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)


답변

select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

count (*) = 0이면 false를 반환합니다. count (*)> 0이면 true를 반환합니다.


답변

나는 이렇게한다 :

SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022

부울로 보는 것은 null이 될 수 없으며 (최소한 .NET에서는) 기본값은 false로 설정되거나 기본값이 true이면 직접 설정할 수 있습니다. 그러나 1 = true이므로 null = false이며 추가 구문이 없습니다.

참고 : 저는 Dapper를 마이크로 마이크로로 사용합니다 .ADO가 동일하게 작동해야한다고 생각합니다.


답변

다른 동등한 문제를 확인하십시오. 조건이 충족되면 (1), 그렇지 않으면 빈 결과가 반환되는 SQL 쿼리 작성. 이 문제에 대한 해결책이 더 일반적이며 위의 답변과 함께 쉽게 사용하여 질문을 할 수 있습니다. 이 문제가 더 일반적이기 때문에 위에서 제시 한 아름다운 해결책 외에도 그 해결책을 제시하고 있습니다.

SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)