【问题标题】:How to convert a varchar column to bit column in SQL SERVER如何在 SQL SERVER 中将 varchar 列转换为位列
【发布时间】:2014-04-18 10:41:33
【问题描述】:

Flag1 是一个 varchar 列,其值为“true”和“false”。我需要将其转换为位列。

当我尝试这样做时:

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 varchar(25) = 'True' -- 前导空格
  • 选择 case @flag1 当 'true' 然后 1 当 'false' 然后 0 else 0 end
  • @JianHuang 请不要在评论中回答,也请查看现有答案。
  • @DanAndrews 抱歉。在 SO 中仍然是新的。将移动答案。

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2000


【解决方案1】:

从表格中选择时,您可以这样做:

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

【讨论】:

  • 我需要在示例中添加“END”关键字。 SELECT CASE Flag1 WHEN 'true' THEN 1 ELSE 0 END AS FlagVal.
【解决方案2】:

我怀疑'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”转换为数据类型位时转换失败。

注意错误信息中'False'的空格!

【讨论】:

    【解决方案3】:

    我认为这与您的列中是否有其他值无关。它与您如何定义“真”或“假”有关。 SQL 认为它是一个字符串而不是一个位。在您的专栏中,我建议使用以下案例陈述:

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

    确保在 true 或 false 中没有任何空格。为此,您可以使用:

    rtrim(ltrim(ColumnName)) 
    

    删除所有空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多