2014-01-29 71 views
0

我们有不同的表,这些表已被意外填充到各个字段中,其空值现在在尝试显示时会引起问题。在DB2中用大量替换空值的简单方式

我知道如何将其逐列替换,但我想知道是否有是一种简单的方法来替换所有列中的所有空值。我没有想出任何可能的解决方案。

计算30个平均约80列的表,这需要一段时间来创建SQL(s)。

任何建议如何简化这项任务? 我们使用DB2 V9,万一有它或函数提前类似

感谢

Xavjer

+0

在这里有一个警告词 - 有一些空值(即缺少另一个值)的情况是_correct_(即客户选择**而不是**的“生日”列此信息)。你需要担心这样的事情 - 有效的空值? –

+0

如果您替换当前的空值,则可以在将来创建新的空值。你应该使用'ALTER TABLE'来重新定义列,使它们不能为空。 – Turophile

+0

@ Clockwork-Muse:不,我们有一个'not null'的概念,所以我们没有任何空字段,我们为它定义了标准值。 – Xavjer

回答

0

可以使用目录表从要修改的列获得名(所有的,如果你想)

select 'update ' || trim(tabschema) || '.' || trim(tabname) 
    || ' set ' || trim(colname) || ' = '' ''' 
    || ' where ' || trim(colname) || ' is NULL;' 
from syscat.columns 
where tabschema not like 'SYS%' 
    and XXX YYYY ; 

(未测试,但它应该是这样的)

这查询会产生一组将执行把文件中的行(复制/粘贴),或者你的猫,然后

db2 -tvf file.sql | db2 +p -tv 

最后,其中的条件是你自己的条件来过滤目录。如果要过滤更多条件,可以使用syscat.tables视图。

+0

这与我所需要的接近,但主要问题如下:我们的列有低值,但不是null ...就像'条目##的例子,其中##是低值(Hex x'00'),我只想用空格替换它们,因此它变成'条目的示例' – Xavjer

+0

认为发现这里:http://stackoverflow.com/questions/605768/search-and-replace-part-of-string-in-database – Xavjer

0

我对db2 luw工具并不熟悉,但您应该能够从现有表中生成至少一个创建表脚本。用一点点,但找到并替换魔术,你可以将创建更改为一个alter table,其中包括not null with default子句。

+0

至少我认为,改变表可以做到这一点...这是一个有点很难遵循移动设备上的语法图。 – Charles