我們有不同的表,這些表已被意外填充到各個字段中,其空值現在在嘗試顯示時會引起問題。在DB2中用大量替換空值的簡單方式
我知道如何將其逐列替換,但我想知道是否有是一種簡單的方法來替換所有列中的所有空值。我沒有想出任何可能的解決方案。
計算30個平均約80列的表,這需要一段時間來創建SQL(s)。
任何建議如何簡化這項任務? 我們使用DB2 V9,萬一有它或函數提前類似
感謝
Xavjer
我們有不同的表,這些表已被意外填充到各個字段中,其空值現在在嘗試顯示時會引起問題。在DB2中用大量替換空值的簡單方式
我知道如何將其逐列替換,但我想知道是否有是一種簡單的方法來替換所有列中的所有空值。我沒有想出任何可能的解決方案。
計算30個平均約80列的表,這需要一段時間來創建SQL(s)。
任何建議如何簡化這項任務? 我們使用DB2 V9,萬一有它或函數提前類似
感謝
Xavjer
可以使用目錄表從要修改的列獲得名(所有的,如果你想)
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視圖。
我對db2 luw工具並不熟悉,但您應該能夠從現有表中生成至少一個創建表腳本。用一點點,但找到並替換魔術,你可以將創建更改爲一個alter table,其中包括not null with default子句。
至少我認爲,改變表可以做到這一點...這是一個有點很難遵循移動設備上的語法圖。 – Charles
在這裏有一個警告詞 - 有一些空值(即缺少另一個值)的情況是_correct_(即客戶選擇**而不是**的「生日」列此信息)。你需要擔心這樣的事情 - 有效的空值? –
如果您替換當前的空值,則可以在將來創建新的空值。你應該使用'ALTER TABLE'來重新定義列,使它們不能爲空。 – Turophile
@ Clockwork-Muse:不,我們有一個'not null'的概念,所以我們沒有任何空字段,我們爲它定義了標準值。 – Xavjer