web-dev-qa-db-ja.com

SQL Selectステートメントでブール値を返す

SQL Selectステートメントでブール値を返すにはどうすればいいですか?

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

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

TRUEがテーブルに存在する場合にのみUserID値を返します。 FALSEがテーブルに存在しない場合はUserID値を返すようにします。どうもありがとうございました。

118
mrjimoy_05

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

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

おそらくこれらの線に沿った何か:

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

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

25
cableload

1 = true0 = falseが一般的なので、行数を数えてbooleanにキャストするだけです。

したがって、投稿されたコードに必要なのはCOUNT()関数だけです。

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

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

7
G.Noulas

私はこのようにします:

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

ブール値をnullにすることはできません(少なくとも.NETでは)ことはできません。デフォルトはfalseにする必要があります。または、デフォルトでtrueに設定されている場合はそれを自分で設定できます。ただし、1 = true、つまりnull = falseであり、特別な構文はありません。

注:私は自分のマイクロ組織としてDapperを使用しています。ADOも同じように機能するはずです。

4
RandomUs1r

0または1を返す 'Exists'を使用してください。

クエリは次のようになります。

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)
4
Ananthi

カスタムの列名を追加して値を取得することに関心があるあなたのために、これは私のために働きました:

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

大文字と小文字を区別して名前を区別したくない場合は、列名から二重引用符を省略することができます(クライアントによっては)。

@ Chadの答えを少し微調整しました。

1
Lucio Mollinedo

別の同等の問題に注意してください。条件が満たされると(1)を返し、そうでなければ空の結果を返すSQLクエリを作成します。この問題に対する解決策はより一般的であり、あなたが尋ねた質問を達成するために上記の回答と共に簡単に使用できることに注意してください。この問題はより一般的なので、私はあなたの問題に対して上で提示された美しい解決策に加えてその解決策を証明しています。

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