2014-01-29 112 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