SQL SELECT - 根据条件返回布尔值

17 浏览
0 Comments

SQL SELECT - 根据条件返回布尔值

基本上我试图做的是这样的:

选择 u.Hostname, u.IsCustom, (u.Status = 5) 作为 IsActive
从 SiteUrlMappings u

其中5是一个代表“活动”网址的整数。

当然,这个不起作用,而且我的SQL语言就像一个生锈的老螺丝刀一样。

0
0 Comments

SQL SELECT - 根据条件返回布尔值的原因是需要根据条件返回布尔值,而不是其他类型的数据。在给定的示例中,需要根据u.Status的值返回布尔值。在SQL Server中,可以使用case语句来实现此目的。解决方法是在SELECT语句中使用case语句,并将结果转换为bit类型。

以下是解决问题的示例代码:

select  u.Hostname,
        u.IsCustom,
        convert(bit, case when u.Status = 5 then 1 else 0 end) as IsActive
from    SiteUrlMappings u

在上述代码中,使用case语句将u.Status的值与5进行比较,并根据条件返回布尔值(1表示真,0表示假)。然后,使用convert函数将结果转换为bit类型。

在SQL Server中,bit类型是最接近真布尔值的数据类型。

通过使用以上代码,可以根据条件返回布尔值,从而满足需求。

0
0 Comments

SQL Server没有一个布尔数据类型,最接近的是bit类型。因此,无法从SELECT语句中返回布尔值或将其用作列或变量的类型。然而,SQL Server的布尔类型实际上有三个有效值:TRUEFALSEUNKNOWN。虽然SQL Server内部使用了布尔类型,但并不能满足问题中尝试返回布尔值的要求。目前,我们仍然无法在数据类型列表(learn.microsoft.com/en-us/sql/t-sql/data-types/…)中找到SQL标准的布尔数据类型,希望在将来能够实现这一功能。

解决方法:

要在SQL Server中根据条件返回布尔值,可以使用bit数据类型,并使用CASE语句将条件转换为bit类型的值。在CASE语句中,将条件设置为WHEN子句,如果条件成立,则返回1(TRUE),否则返回0(FALSE)。示例如下:

SELECT u.Hostname,
       u.IsCustom,
       CAST(CASE
              WHEN u.Status = 5 THEN 1
              ELSE 0
            END AS BIT) AS IsActive
FROM   SiteUrlMappings u

通过上述方法,可以根据条件返回布尔值。

0
0 Comments

问题的出现原因是作者想要根据条件返回布尔值,但是在SQL查询中却不知道如何实现。解决方法是利用bit数据类型的特性,将非零值转换为bit类型会返回1。可以通过对条件进行位取反操作(使用~符号)来得到布尔值。

具体的解决方案如下:

SELECT
    u.Hostname,
    u.IsCustom,
    ~ CAST((u.Status = 5) AS bit) AS IsActive
FROM SiteUrlMappings u

在这个解决方案中,使用了位取反操作符(~)来将条件的结果进行取反,然后使用CAST函数将取反后的结果转换为bit类型,最终得到布尔值IsActive。

在讨论中,某些情况下了作者在瑞士键盘上误操作了波浪符号(~)。然后有人问波浪符号是否在SQL Server中有特殊含义,另一个人回答在SQL Server中,波浪符号用于位取反操作。

通过这个讨论,作者学到了使用波浪符号(~)可以实现结果的取反操作。

0