2015-11-06 57 views
0

UPDATE語句的問題:我如何設置「UPDATE SET NOT NULL」

UPDATE tmp_gelbe_seten SET haus_nr_von = ubstring(hausnummer,'([0-9]*)') WHERE hausnummer like '%-%'; 

UPDATE tmp_gelbe_seten SET haus_nr_bis = substring(hausnummer,'-([0-9]*)') WHERE hausnummer like '%-%'; 

UPDATE tmp_gelbe_seten SET haus_nr_von = substring(hausnummer,'([0-9]*)') WHERE hausnummer like '%/%'; 

UPDATE tmp_gelbe_seten SET haus_nr_bis = substring(hausnummer,'/([0-9]*)') WHERE hausnummer like '%/%'; 

如果我運行他們一個又一個比他們互相覆蓋。我怎樣才能防止它?

與問候

安德烈

+1

他們只覆蓋海誓山盟,如果您有同時包含'-'和'/'門牌號碼,否則你的'where'條款確保了至多一個'update'語句爲任何特定的設置'haus_nr_von'行,並且只有一個爲任何特定行設置'haus_nr_bis'。如果你的房屋號碼包含'-'和'/',你想怎麼做? – hvd

回答

2

你需要一個條件SET子句:

update tmp_gelbe_seten 
    set haus_nr_von = case 
         when hausnummer like '%-%' then substring(hausnummer,'([0-9]*)') 
         when hausnummer like '%/%' then substring(hausnummer,'([0-9]*)') 
        end, 
     haus_nr_bis = case 
         when hausnummer like '%-%' then substring(hausnummer,'-([0-9]*)') 
         when hausnummer like '%/%' then substring(hausnummer,'/([0-9]*)') 
        end 
where hausnummer like '%-%' 
    or hausnummer like '%/%'; 

需要注意的是,只選擇你真的想改變那些行where條款是非常重要的。性能是其中一個原因和正確性。如果你不這樣做,CASE語句將返回NULL,如果hausnummer不符合任何條件。如果您離開where條款出來,你添加一個ELSE部分返回列進行更新,因此,目前的值不會改變else haus_nr_vonelse haus_nr_bis

至於haus_nr_von表達的是在同一這兩種情況下,上面的語句可以簡化爲:

update tmp_gelbe_seten 
    set haus_nr_von = substring(hausnummer,'([0-9]*)'), 
     haus_nr_bis = case 
         when hausnummer like '%-%' then substring(hausnummer,'-([0-9]*)') 
         when hausnummer like '%/%' then substring(hausnummer,'/([0-9]*)') 
        end 
where hausnummer like '%-%' 
    or hausnummer like '%/%'; 
+0

Tnx很多。這正是我期待的。 –