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

时间:2011-10-15 14:34:28

标签: sql-server tsql

基本上我正在尝试这样做

select  u.Hostname, u.IsCustom, (u.Status = 5) as IsActive
from    SiteUrlMappings u

其中5是表示“活动”网址的int。

当然这不起作用,我的sql就像一把旧螺丝刀一样生锈。

5 个答案:

答案 0 :(得分:27)

您不需要CASE表达式 只需利用bit的工作原理:当转换为位

时,所有非零值都为1
SELECT
    u.Hostname,
    u.IsCustom,
    ~ CAST((u.Status - 5) AS bit) AS IsActive
from    SiteUrlMappings u

答案 1 :(得分:24)

SQL Server没有布尔数据类型。最接近的是bit

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

答案 2 :(得分:6)

您需要case语句,如下所示:

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

from    SiteUrlMappings u

bit与SQL Server

中的真实布尔值接近

答案 3 :(得分:4)

试试这个:

SELECT
    u.Hostname,
    u.IsCustom,
    CASE
WHEN u.Status = 5 THEN
    1
ELSE
    0
END AS IsActive
from    SiteUrlMappings u

答案 4 :(得分:0)

您可以改用CASE ... WHEN语法。