181

SQL Selectステートメントでブール値を返す方法は?

私はこのコードを試しました:

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

TRUEがテーブルに存在する場合にのみ返さUserIDれます。テーブルに存在しないFALSE場合は返してほしい。UserID

4

9 に答える 9

299

ユーザーが存在しない場合、そこにあるものはまったく行を返しません。必要なものは次のとおりです。

SELECT CASE WHEN EXISTS (
    SELECT *
    FROM [User]
    WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
于 2012-04-30T02:17:07.243 に答える
37

おそらくこれらの行に沿ったもの:

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

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

于 2012-04-30T02:20:58.607 に答える
26

1 = true一般にと を考えると0 = false、行数を数えて にキャストするだけbooleanです。

したがって、投稿されたコードにはCOUNT()関数を追加するだけで済みます。

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
于 2013-08-15T22:28:46.473 に答える
10
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

count(*) = 0 の場合は false を返します。count(*) > 0 の場合は true を返します。

于 2015-10-07T12:25:31.477 に答える
7

私はこのようにします:

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

ブール値は(少なくとも.NETでは)決してnullにならないため、デフォルトでfalseにするか、デフォルトでtrueの場合は自分で設定できます。ただし、1 = true であるため、null = false であり、余分な構文はありません。

注: 私はマイクロオームとして Dapper を使用していますが、ADO も同じように動作すると思います。

于 2018-03-02T22:47:38.243 に答える
1
DECLARE @isAvailable      BIT = 0;

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

最初は isAvailable ブール値が 0 に設定されています

于 2020-04-23T07:34:49.730 に答える