3

Flag1varchar列,其值爲「true」和「false」。我需要將其轉換爲位列。如何將varchar列轉換爲SQL SERVER中的位列

當我嘗試這樣做:

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. 
+0

只是提醒。你能仔細檢查你的結果以防止誤報和否定嗎?請運行以下命令: –

+0

declare @ flag1 varchar(25)='True' - 前導空格 –

+0

當'true'時選擇case @ flag1然後1'false'時0然後0 else 0 end –

回答

6

我懷疑'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) 

- >消息245,級別16,狀態1,第2行轉換 轉換VARCHAR值 '假' 爲數據類型比特時失敗。

注意錯誤信息中'False'的空格!

3

雖然從表中選擇,你可以這樣做:

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 
+0

我需要在示例中添加「END」關鍵字。 'SELECT CASE Flag1 WHEN'true'THEN 1 ELSE 0 END AS FlagVal'。 – Aebsubis

相關問題