Flag1
は、値が「true」および「false」のvarchar
列です。これをビット列に変換する必要があります。
私がこれをやろうとすると:
Convert(Bit,Flag1)
エラーが表示されます
Msg 245, Level 16, State 1, Line 2
Syntax error converting the varchar value 'False' to a column of data type bit.
フィールド「Flag1」には、「true」と「false」に加えて他の値があると思われます。したがって、Flag1の値を確認してください。
youTableから個別のFlag1を選択します。
これが私の証拠です:
declare @Flag varchar(25) = 'False'
select CONVERT(Bit, @Flag)
それはうまくいきます。
ただし、これにより同じエラーが発生します。
declare @Flag varchar(25) = ' False' -- Pay attention to the the space in ' False'!
select CONVERT(Bit, @Flag)
-> Msg 245、レベル16、状態1、行2 varchar値「False」をデータ型ビットに変換すると、変換に失敗しました。
エラーメッセージの「False」のスペースに注意してください。
テーブルから選択するときに、次のことができます。
SELECT CASE Flag1 WHEN 'true' THEN 1 ELSE 0 END AS FlagVal
構文:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
列に他の値がある場合、それは関係ないと思います。これは、「true」または「false」をどのように定義したかと関係があります。 SQLは、それがビットではなく文字列であると見なします。あなたのコラムでは、次のようなCaseステートメントを使用することをお勧めします。
select ...., case when ColumnName = "True" then 1 else 0 end as Flag1
Trueまたはfalseにスペースがないことを確認してください。そのためにあなたは使うことができます:
rtrim(ltrim(ColumnName))
スペースを削除します。