web-dev-qa-db-ja.com

SQLSERVERでvarchar列をビット列に変換する方法

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.
7
user1254579

フィールド「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」のスペースに注意してください。

10
Jian Huang

テーブルから選択するときに、次のことができます。

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
4
Raging Bull

列に他の値がある場合、それは関係ないと思います。これは、「true」または「false」をどのように定義したかと関係があります。 SQLは、それがビットではなく文字列であると見なします。あなたのコラムでは、次のようなCaseステートメントを使用することをお勧めします。

select ...., case when ColumnName = "True" then 1 else 0 end as Flag1

Trueまたはfalseにスペースがないことを確認してください。そのためにあなたは使うことができます:

rtrim(ltrim(ColumnName)) 

スペースを削除します。

0
Satista