SQL Serverでリテラルブール値を書く方法は?サンプルの使用を参照してください。
select * from SomeTable where PSEUDO_TRUE
別のサンプル:
if PSEUDO_TRUE
begin
select 'Hello, SQL!'
end
注:上記のクエリは、使用方法とは関係ありません。リテラルブール値をテストするだけです。
SQL Serverにはブール値 データ型 はありません。 @Mikaelが示したように、最も近い近似値はビットです。しかし、それは数値型であり、ブール型ではありません。さらに、0
または1
(および1つの非値、NULL
)の2つの値のみをサポートします。
SQL(標準SQL、およびT-SQLダイアレクト)は、 つの値を持つロジック を記述します。 SQLのブール型は、TRUE
、FALSE
、およびUNKNOWN
の3つの値(および、値以外のNULL
)をサポートする必要があります。このため、bit
は実際にはここでは適切ではありません。
SQL Serverがデータ型をサポートしていないことを考えると、その「型」のリテラルを記述できるとは考えないでください。
select * from SomeTable where 1=1
Microsoft :によると、検索の構文は
[ WHERE <search_condition> ]*
検索条件は次のとおりです。
<search_condition> ::=
{ [ NOT ] <predicate> | ( <search_condition> ) }
[ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]
[ ,...n ]
述語は次のとおりです。
<predicate> ::=
{ expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression
ご覧のとおり、alwaysは比較する2つの式を記述する必要があります。ここで、検索条件はboolean expression1 = 1、a!= b
検索式をboolean定数と混同しないでください 'True'または 'False'。ブール変数をBIT変数に割り当てることができます
DECLARE @B BIT
SET @B='True'
ただし、TSQLでは、次のようなブール式の代わりにブール定数を使用することはできません。
SELECT * FROM Somewhere WHERE 'True'
効果がないでしょう。
ただし、ブール定数を使用して、次のような両側検索式を作成できます。
SEARCH * FROM Somewhere WHERE 'True'='True'
これは、他のどの回答でも言及されていません。あなたが使用できるブール値として水和する(べき)値が必要な場合
CONVERT(bit、0)-false CONVERT(bit、1)-true
これにより、ブール値ではないビットが得られます。たとえば、ifステートメントでその値を使用することはできません。
IF CONVERT(bit, 0)
BEGIN
print 'Yay'
END
woudlは解析されません。あなたはまだ書く必要があります
IF CONVERT(bit, 0) = 0
そのため、それほど便利ではありません。
ほとんどのデータベースはこれを受け入れます:
select * from SomeTable where true
ただし、一部のデータベース(SQL Server、Oracleなど)にはブール型がありません。これらの場合、次を使用できます。
select * from SomeTable where 1=1
ところで、SQLのwhere句を手動で作成する場合、これはコードを単純化するための基礎となります。where句に追加しようとしている条件がfirstであるかどうかを知る必要がないからです。 one("WHERE"
を前に付ける必要があります)、または後続 one("AND"
を前に置く必要があります)。常に"WHERE 1=1"
で始まることにより、where句に追加されたすべての条件(存在する場合)の前に"AND"
が付きます。
SQL Serverには、リテラルのtrueまたはfalse値はありません。まれに、これが必要な場合に1=1
メソッド(または同様のメソッド)を使用する必要があります。
1つのオプションは、trueおよびfalseに対して独自の名前付き変数を作成することです
DECLARE @TRUE bit
DECLARE @FALSE bit
SET @TRUE = 1
SET @FALSE = 0
select * from SomeTable where @TRUE = @TRUE
ただし、これらはバッチのスコープ内にのみ存在します(それらを使用するすべてのバッチで再宣言する必要があります)
値'TRUE'
および'FALSE'
を使用できます。 https://docs.Microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql から:
文字列値TRUEおよびFALSEはビット値に変換できます。TRUEは1に変換され、FALSEは0に変換されます。
SQL Serverでリテラルブール値を書く方法は?
選択* PSEUDO_TRUEのSomeTableから
そのようなことはない。
= < > like ...
を使用して値を何かと比較する必要があります。 SQL Serverでブール値を取得するのに最も近いのは bit です。そして、それはnull
、0
および1
の値を持つことができる整数です。
「真の値」は、1だけでなく0以外のすべてであると考える必要があります。したがって、1 = 1の代わりに1 <> 0と記述する必要があります。
パラメーター(@param <> 0)を使用すると、変換の問題が発生する可能性があるためです。
最も知られているのは、コントロールのTrue値を1ではなく-1として変換するAccessです。
TSQLでブール値を使用する価値について疑問を持っています。ブール値とforループを希望し始めるたびに、SQLプログラマーではなくCプログラマーのように問題に近づいていることに気付きました。ギアを切り替えたとき、問題は些細なものになりました。
SQLでは、データのセットを操作しています。 「WHERE BOOLEAN」は、使用しているセットを変更しないため、効果がありません。フィルタ句を有効にするには、各行を何かと比較する必要があります。 Table/Resultset is iEnumerable、SELECTステートメントis FOREACHループ。
はい、「WHERE IsAdmin = True」は「WHERE IsAdmin = 1」よりも読みやすいです
はい、TSQLを動的に生成する場合、「WHERE True」は「WHERE 1 = 1、...」よりも優れています。
また、ストアドプロシージャにブール値を渡すと、ifステートメントが読みやすくなる場合があります。
しかし、ほとんどの場合、TSQLにあるIF、WHILE、およびTempテーブルが多ければ多いほど、リファクタリングする可能性が高くなります。
これが質問の意図に答えることを願っています。 SQL Serverにはブール値はありませんが、Accessから変換されたブール型を持つデータベースがある場合、Accessで機能するフレーズは "... WHERE Foo"(Fooはブール列名)です。 "... WHERE Foo <> 0"に置き換えることができます...これは動作します。幸運を!