SQL SELECT - 根据条件返回布尔值
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
类型是最接近真布尔值的数据类型。
通过使用以上代码,可以根据条件返回布尔值,从而满足需求。
SQL Server没有一个布尔数据类型,最接近的是bit
类型。因此,无法从SELECT
语句中返回布尔值或将其用作列或变量的类型。然而,SQL Server的布尔类型实际上有三个有效值:TRUE
、FALSE
和UNKNOWN
。虽然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
通过上述方法,可以根据条件返回布尔值。
问题的出现原因是作者想要根据条件返回布尔值,但是在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中,波浪符号用于位取反操作。
通过这个讨论,作者学到了使用波浪符号(~)可以实现结果的取反操作。