返回SQL Select语句的布尔值

时间:2012-04-30 02:14:08

标签: sql select boolean

如何在SQL Select Statement上返回一个布尔值?

我试过这段代码:

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

,如果表中存在TRUE,则仅返回UserID值。如果表中不存在FALSE,我希望它返回UserID值。非常感谢你。

9 个答案:

答案 0 :(得分:215)

如果用户不存在,那么你所拥有的将根本不返回任何行。这就是你需要的:

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

答案 1 :(得分:25)

可能还有以下几点:

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;

http://sqlfiddle.com/#!3/5e555/1

答案 2 :(得分:20)

鉴于通常1 = true0 = false,您需要做的就是计算行数,并投射到boolean

因此,您发布的代码只需添加COUNT()功能:

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

答案 3 :(得分:7)

select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

如果count(*)= 0则返回false。如果count(*)> 0返回true。

答案 4 :(得分:4)

我这样做:

SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022

看作一个布尔值永远不能为空(至少在.NET中),它应该默认为false,或者如果它默认为true,你可以自己设置它。但是1 = true,所以null = false,没有额外的语法。

注意:我使用Dapper作为我的微观orm,我想象ADO应该是一样的。

答案 5 :(得分:4)

使用' Exists'返回0或1。

查询将如下:

$dataarray = array(
"created"   => "2018-04-11T07:02:25.000Z",
"creator"   => array(
                "displayName"   => "First Last",
                "description"   => "Added via CURL for testing",
                "email"         => "test@testcompanies.com"
),
"end"       => array(
                "dateTime"      => "2018-05-08T14:30:00+05:30",
                "timeZone"      => "Asia/Calcutta"
),
"start"     => array(
                "dateTime"      => "2018-05-08T13:30:00+05:30",
                "timeZone"      => "Asia/Calcutta"
),
"location"  => "Siliguri",
"reminders" => array(
                "useDefault"        => "true"
),
);
$url = "https://www.googleapis.com/calendar/v3/calendars/{my-calendar-id}/events?key={API_KEY}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($dataarray));
curl_setopt($ch, CURLOPT_POST, 1);
$server_output = curl_exec ($ch);
curl_close ($ch);
$response = json_decode($server_output);

答案 6 :(得分:0)

请注意另一个等效问题:创建一个SQL查询,如果满足条件,则返回(1),否则返回空结果。请注意,此问题的解决方案更为通用,可以轻松地与上述答案结合使用,以解决您提出的问题。由于此问题较为笼统,因此除了上面为您提供的精美解决方案之外,我还在证明其解决方案。

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

答案 7 :(得分:0)

对于那些对增加自定义列名的值感兴趣的人,这对我有用:

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

如果您不希望保留名称的区分大小写(在某些客户端中),可以跳过列名称的双引号。

为此,我略微调整了@Chad的答案。

答案 8 :(得分:0)

DECLARE @isAvailable      BIT = 0;

IF EXISTS(SELECT 1  FROM [User] WHERE (UserID = 20070022))
BEGIN
 SET @isAvailable = 1
END

最初isAvailable布尔值设置为0

相关问题