返回SQL Select语句的布尔值

mrj*_*_05 128 sql select boolean

如何在SQL Select语句上返回一个布尔值?

我试过这段代码:

SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
Run Code Online (Sandbox Code Playgroud)

并且只有在表上存在时才返回TRUEUserID.FALSE如果UserID表中不存在,我希望它返回值.非常感谢你.

Cha*_*had 234

如果用户不存在,那么你所拥有的将根本不返回任何行.这就是你需要的:

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

  • @ robertpeter07 - 这两个是等价的,但是`*`比较惯用.请参阅[此问题](http://stackoverflow.com/q/1597442/1121833). (7认同)
  • @xMetalDetectorx这对我来说是添加列名(“ AS bool”部分非常重要):`CAST(存在时的情况(SELECT * FROM mytable WHERE mytable.id = 1)然后真假假以AS BOOL为假)AS mycolumn名称 (3认同)
  • 为什么使用星号,最好使用1而不是*。 (2认同)

cab*_*oad 28

可能是这些方面的东西:

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

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

  • 这将返回一个字符串,而不是布尔值 (6认同)

Ste*_*art 21

鉴于普遍1 = true0 = false,所有你需要做的是数列的数量,及演员boolean.

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

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
Run Code Online (Sandbox Code Playgroud)

  • 执行`存在(`测试比对具有大量行的表执行`Count(1)`测试要快得多. (6认同)
  • 大概.我没有在我的回答中声称性能,只是为了实现OP想要的最小代码更改.但是,如果列'UserID`被索引(或者甚至是PK),你肯定会直接进入存在(或不存在)的唯一行. (5认同)

小智 8

select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)
Run Code Online (Sandbox Code Playgroud)

如果count(*)= 0则返回false.如果count(*)> 0返回true.


Ana*_*thi 7

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

查询将类似于:

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)
Run Code Online (Sandbox Code Playgroud)

  • 错误:“关键字'EXISTS'附近的语法不正确。” http://sqlfiddle.com/#!18/ef905/18 (6认同)

Ran*_*s1r 6

我这样做:

SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022
Run Code Online (Sandbox Code Playgroud)

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

注意:我使用 Dapper 作为我的微型软件,我想 ADO 应该也能正常工作。