首页 > 解决方案 > SQL DB2 替换列中的值

问题描述

我有以下列,B 代表布尔值,其余的是空值。我必须将此列中的所有值更改为单词 COLUMN A。

  COLUMN
  -----


   B

我尝试了不同的东西,例如

 SELECT COLUMN 
 FROM TABLE
 WHERE COALESCE(NULLIF(COLUMN,''), 'COLUMN A');

我收到错误:“在函数“BOOLEAN”的字符串参数中发现无效字符。” 我有点坚持这个问题,我对这个布尔值感到困惑。如果有人可以帮助我,我将非常高兴,谢谢!

标签: sqldb2

解决方案


WHERE 子句未完成。将 COALESCEd 值与某物进行比较:

SELECT COLUMN 
 FROM TABLE
 WHERE COALESCE(NULLIF(COLUMN,''), 'COLUMN A') = 'COLUMN A';

或更好:

SELECT COLUMN 
 FROM TABLE
 WHERE COLUMN IS NULL OR COLUMN = ''

不需要任何思考/计算来制定您的选择逻辑。更易于维护,对同行开发人员更好

*以上是针对不涉及布尔数据类型的常见情况的一般建议(通常需要一些不同的处理)


现在,您说您必须将值更改为某些内容。这需要一个 UPDATE 语句。如果此列是布尔值,则它的值不会为空字符串。空白将是空值:

UPDATE TABLE SET COLUMN = (some boolean) WHERE COLUMN IS NULL

如果您不想将表数据永久更改为某些内容,而是想将其选为出现空白的某个值,但保留存储在表中的空白:

SELECT COALESCE(column, (some boolean)) FROM TABLE

可能值得注意的是,并非所有版本的 DB2 都可以在结果集中返回布尔值——这在数据库供应商中非常典型。如果您的 DB2 版本因此受到限制,则使用 case 将布尔值转换为其他可表示的值

SELECT CASE WHEN column = TRUE THEN 'true' ELSE 'false' END FROM TABLE

推荐阅读