SQL 中 boolean 类型的 boolean :“” 的 case 语句输入语法无效

case statement for boolean invalid input syntax for type boolean :"" in sql

提问人:bharathi m 提问时间:8/11/2023 最后编辑:bharathi m 更新时间:8/11/2023 访问量:64

问:

尝试将列从一个表 (table_temp) 插入到另一个表 (main_table),同时执行从表中转换列table_temp类型。

以下命令在 redshift 中运行。我得到这样的输出。

Boolean 类型:“”的输入语法无效

insert into main_table (
  select 
    case 
      when id = 'null' then null 
      when id ='' then null 
      else id:: varchar(max) 
    end as id, 
    case 
      when date = 'null' then null 
      when date ='' then null 
      else date ::timestamp 
    end as date, 
    case when payment = 'null' then null 
      when payment ='' then null 
      when payment ='None' then null 
      else payment::double precision 
    end as payment, 
    case 
      when isdeleted = 'null' then null 
      when isdeleted ='' then null 
      else replace(replace( isdeleted ,'false','0'),'true','1')::int::boolean 
    end as isdeleted 
  from table_temp
  );
SQL 转换 布尔 值 amazon-redshift typecasting-operator

评论


答:

0赞 Isolated 8/11/2023 #1

该列中可能有其他值,例如“abcstring”。

如果要显示 true/false/null,那么这应该有效:

case 
 when isdeleted = 'null' then null 
 when isdeleted ='' then null 
 when isdeleted in ('true','false') then replace(replace(isdeleted ,'false','0'),'true','1')::boolean 
end as isdeleted

如果要显示 1/0/null,那么这应该有效:

case 
 when isdeleted = 'null' then null 
 when isdeleted ='' then null 
 when isdeleted in ('true','false') then isdeleted::boolean
end as isdeleted

我不是 redshift 用户,因此您可能需要也可能不需要“else null”。在 Postgres 中,它按原样运行良好。既然我没有 Redshift 游乐场,那么也许这完全是错误的。在这种情况下,我可以删除此答案。

评论

0赞 bharathi m 8/11/2023
尝试了 true/false/null,但仍然出现相同的错误