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

Ben*_*ter 24 t-sql sql-server

基本上我正在努力做到这一点

select  u.Hostname, u.IsCustom, (u.Status = 5) as IsActive
from    SiteUrlMappings u
Run Code Online (Sandbox Code Playgroud)

其中5是表示"活动"URL的int.

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

gbn*_*gbn 30

您不需要CASE表达式
只是利用如何bit工作:当转换为位时,所有非零值都给出1

SELECT
    u.Hostname,
    u.IsCustom,
    ~ CAST((u.Status - 5) AS bit) AS IsActive
from    SiteUrlMappings u
Run Code Online (Sandbox Code Playgroud)

  • @Martin Smith:我在我的瑞士键盘上敲了一下我的波浪号.谢谢 (2认同)

Mar*_*ith 25

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  
Run Code Online (Sandbox Code Playgroud)


Fac*_*tic 7

你需要一个case声明,如下所示:

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

from    SiteUrlMappings u
Run Code Online (Sandbox Code Playgroud)

bit 尽可能接近真正的布尔值,因为您可以在SQL Server中获得


Bar*_*aye 5

尝试这个:

SELECT
    u.Hostname,
    u.IsCustom,
    CASE
WHEN u.Status = 5 THEN
    1
ELSE
    0
END AS IsActive
from    SiteUrlMappings u
Run Code Online (Sandbox Code Playgroud)

  • 你需要把它转换成一点。这将返回一个整数 (3认同)