在SQL的SELECT语句中返回布尔值

13 浏览
0 Comments

在SQL的SELECT语句中返回布尔值

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

我尝试了以下代码:

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

它只会在表中存在UserID时返回TRUE。如果表中不存在UserID,我想要它返回FALSE

0
0 Comments

问题的出现原因是需要在SQL查询语句中返回布尔值,而不是默认的行结果。解决方法是使用COUNT()函数来计算查询结果的行数,并将其强制转换为布尔值。下面是一个示例代码:

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

这个解决方法比在拥有大量行的表上进行Count(1)测试要快得多。如果UserID列被索引(或者甚至是主键),那么你肯定直接跳转到唯一存在(或不存在)的那一行。

0
0 Comments

问题出现的原因是:在给定的SQL语句中,如果用户不存在,将返回零行数据。为了解决这个问题,需要使用EXISTS子查询来判断用户是否存在,并返回布尔值。

解决方法如下(代码中的20070022是一个示例用户ID):

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

关于为什么使用星号*而不是1的问题,它们是等效的,但是*更符合惯例。具体可以参考这个问题

如果在WHILE循环中使用,需要在'WHILE'之后的大括号{}中进行封装。

如果想为返回的值添加列名,可以使用以下代码(这里的AS bool部分非常重要):

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

另外,关于将cast放在case之外而不是两个表达式都进行cast的问题,这只是一个非常小的细节。

0
0 Comments

问题:在SQL选择语句中返回布尔值的问题

问题原因:在SQL选择语句中,直接使用CASE语句返回布尔值时,实际返回的是字符串类型而不是布尔类型。

解决方法:在CASE语句后使用CAST函数将返回值转换为布尔类型。同时,为了更好的代码可读性,可以给返回的列指定一个列名。

以下是一个解决方法的示例代码:

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT) as mycolumnname

FROM dummy

WHERE id = 1;

可以在以上链接中查看示例代码的运行结果。

通过以上解决方法,我们可以在SQL选择语句中返回布尔值。

0