如何在SQL Select Statement上返回一个布尔值?
我试过这段代码:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
,如果表中存在TRUE
,则仅返回UserID
值。如果表中不存在FALSE
,我希望它返回UserID
值。非常感谢你。
答案 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;
答案 2 :(得分:20)
鉴于通常1 = true
和0 = 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