SQL Select 문에 부울 값 반환
SQL Select 문에서 부울 값을 반환하는 방법은 무엇입니까?
나는 이 코드를 시도했습니다.
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
그리고 그것은 돌아올 뿐입니다.TRUE
만약에UserID
테이블에 존재합니다.반품을 원합니다.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 = true
그리고.0 = false
당신이 해야 할 일은 행의 수를 세고, 다음으로 캐스팅하는 것입니다.boolean
.
따라서, 당신의 게시된 코드는 단지COUNT()
추가된 기능:
SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
0 또는 1을 반환하는 '존재'를 사용합니다.
쿼리는 다음과 같습니다.
SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)
count(*)인 경우 = 0은 false를 반환합니다.카운트(*) > 0이 true를 반환하는 경우.
저는 이렇게 합니다.
SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022
부울로 보는 것은 null일 수 없습니다(적어도 에서).NET), 기본적으로 false로 설정해야 합니다. 그렇지 않으면 기본값이 True인 경우 직접 설정할 수 있습니다.그러나 1 = true이므로 null = false이며 추가 구문은 없습니다.
참고: 저는 Dapper를 제 마이크로폰으로 사용합니다. 저는 ADO도 동일하게 작동해야 한다고 생각합니다.
사용자 지정 열 이름을 추가하는 데 관심이 있는 사용자에게는 다음과 같은 이점이 있습니다.
CAST(
CASE WHEN EXISTS (
SELECT *
FROM mytable
WHERE mytable.id = 1
)
THEN TRUE
ELSE FALSE
END AS bool)
AS "nameOfMyColumn"
일부 클라이언트에서는 이름의 대소문자를 구분하지 않는 경우 열 이름에서 큰따옴표를 생략할 수 있습니다.
저는 이것을 위해 @Chad의 대답을 약간 수정했습니다.
이와 유사한 또 다른 문제에 주목하십시오.조건이 충족되면 (1)을 반환하고 그렇지 않으면 빈 결과를 반환하는 SQL 쿼리 만들기.이 문제에 대한 해결책은 보다 일반적이며 위의 답변과 함께 사용하여 질문한 질문을 쉽게 달성할 수 있습니다.이 문제가 더 일반적이기 때문에 위에서 제시한 아름다운 해결책 외에도 해결책을 증명하고 있습니다.
SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)
DECLARE @isAvailable BIT = 0;
IF EXISTS(SELECT 1 FROM [User] WHERE (UserID = 20070022))
BEGIN
SET @isAvailable = 1
END
처음에는 isAvailable 부울 값이 0으로 설정되었습니다.
언급URL : https://stackoverflow.com/questions/10377781/return-boolean-value-on-sql-select-statement
'programing' 카테고리의 다른 글
단추를 링크처럼 만드는 방법은 무엇입니까? (0) | 2023.08.10 |
---|---|
사전 자르기 (0) | 2023.08.10 |
오류 1045(28000) mysql을 중지할 수 없습니다. (0) | 2023.08.05 |
SQLFiddle에서 PL/SQL을 얻는 방법은 무엇입니까? (0) | 2023.08.05 |
동일한 ID에 대한 제한이 있는 선택 (0) | 2023.08.05 |