SQL DB2替换列中的值

时间:2018-11-17 17:06:28

标签: sql db2

我在下面的列中,B代表布尔值,其余为空值。我必须将此列中的所有值都更改为单词COLUMNA。

  COLUMN
  -----


   B

例如,我尝试了不同的事情

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

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

2 个答案:

答案 0 :(得分:0)

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版本受到限制,则使用情况将布尔值转换为其他可表示的值

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

答案 1 :(得分:0)

最简单的方法是使用CASE表达式。我对db2不熟悉,因此您可能需要进一步研究它,但是在其他DBMS中,它的工作方式如下:

选择案例     当COLUMN =``THEN'COLUMN A'-如果COLUMN ='',请将其替换为'COLUMN A'     ELSE COLUMN-否则,请保持COLUMN不变。     以'COLUMN'结尾-在结果'COLUMN'中将该列命名 从表

这是一篇文章,解释了它在db2中的工作方式: https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/sqlref/src/tpc/db2z_caseexpression.html

相关问题