181

如何在 SQL Select 语句中返回布尔值?

我试过这段代码:

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

并且仅TRUEUserID存在于表上时才返回。FALSE如果UserID桌子上不存在,我希望它返回。

4

9 回答 9

299

如果用户不存在,您所拥有的将根本不返回任何行。这是您需要的:

SELECT CASE WHEN EXISTS (
    SELECT *
    FROM [User]
    WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
于 2012-04-30T02:17:07.243 回答
37

可能是这样的:

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

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

于 2012-04-30T02:20:58.607 回答
26

鉴于通常1 = trueand 0 = false,您需要做的就是计算行数,然后转换为 a boolean

因此,您发布的代码只需要COUNT()添加一个函数:

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
于 2013-08-15T22:28:46.473 回答
17

使用返回 0 或 1 的“存在​​”。

查询将如下所示:

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)
于 2018-05-10T10:22:26.637 回答
10
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

如果 count(*) = 0 返回 false。如果 count(*) > 0 返回真。

于 2015-10-07T12:25:31.477 回答
7

我这样做:

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

看到一个布尔值永远不能为空(至少在.NET中),它应该默认为false,或者如果它默认为true,你可以自己设置它。然而 1 = true,所以 null = false,并且没有额外的语法。

注意:我使用 Dapper 作为我的 micro orm,我想 ADO 应该也可以这样工作。

于 2018-03-02T22:47:38.243 回答
2

对于那些有兴趣获得添加自定义列名称的值的人,这对我有用:

CAST(
    CASE WHEN EXISTS ( 
           SELECT * 
           FROM mytable 
           WHERE mytable.id = 1
    ) 
    THEN TRUE 
    ELSE FALSE 
    END AS bool) 
AS "nameOfMyColumn"

如果您对保持名称的大小写不感兴趣(在某些客户端中),您可以跳过列名称中的双引号。

我为此稍微调整了@Chad 的答案。

于 2018-11-29T23:56:49.910 回答
1

请注意另一个等效问题:创建一个 SQL 查询,如果条件满足则返回 (1),否则返回空结果。请注意,此问题的解决方案更通用,可以轻松地与上述答案一起使用,以实现您提出的问题。由于这个问题更普遍,除了上面针对您的问题提出的漂亮解决方案之外,我还证明了它的解决方案。

SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)
于 2018-10-11T12:07:00.523 回答
1
DECLARE @isAvailable      BIT = 0;

IF EXISTS(SELECT 1  FROM [User] WHERE (UserID = 20070022))
BEGIN
 SET @isAvailable = 1
END

最初 isAvailable 布尔值设置为 0

于 2020-04-23T07:34:49.730 回答