SQL Selectステートメントでブール値を返すにはどうすればいいですか?
私はこのコードを試してみました:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
TRUE
がテーブルに存在する場合にのみUserID
値を返します。 FALSE
がテーブルに存在しない場合はUserID
値を返すようにします。どうもありがとうございました。
ユーザーが存在しない場合、あなたが持っているものはまったく行を返しません。必要なものは次のとおりです。
SELECT CASE WHEN EXISTS (
SELECT *
FROM [User]
WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
おそらくこれらの線に沿った何か:
SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;
1 = true
と0 = false
が一般的なので、行数を数えてboolean
にキャストするだけです。
したがって、投稿されたコードに必要なのはCOUNT()
関数だけです。
SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)
Count(*)= 0の場合はfalseを返します。 count(*)> 0の場合はtrueを返します。
私はこのようにします:
SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022
ブール値をnullにすることはできません(少なくとも.NETでは)ことはできません。デフォルトはfalseにする必要があります。または、デフォルトでtrueに設定されている場合はそれを自分で設定できます。ただし、1 = true、つまりnull = falseであり、特別な構文はありません。
注:私は自分のマイクロ組織としてDapperを使用しています。ADOも同じように機能するはずです。
0または1を返す 'Exists'を使用してください。
クエリは次のようになります。
SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)
カスタムの列名を追加して値を取得することに関心があるあなたのために、これは私のために働きました:
CAST(
CASE WHEN EXISTS (
SELECT *
FROM mytable
WHERE mytable.id = 1
)
THEN TRUE
ELSE FALSE
END AS bool)
AS "nameOfMyColumn"
大文字と小文字を区別して名前を区別したくない場合は、列名から二重引用符を省略することができます(クライアントによっては)。
@ Chadの答えを少し微調整しました。
別の同等の問題に注意してください。条件が満たされると(1)を返し、そうでなければ空の結果を返すSQLクエリを作成します。この問題に対する解決策はより一般的であり、あなたが尋ねた質問を達成するために上記の回答と共に簡単に使用できることに注意してください。この問題はより一般的なので、私はあなたの問題に対して上で提示された美しい解決策に加えてその解決策を証明しています。
SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)