我对UPDATE
语句有疑问:
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 '%/%';
如果我一个接一个地运行它们而不是相互覆盖它们。我该如何预防?
问候
安德烈
答案 0 :(得分: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
与任何条件都不匹配,hausnummer
语句将返回NULL。如果您执行保留where
子句,则 添加ELSE
部分,返回要更新的列,以便当前值为未更改else haus_nr_von
和else 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 '%/%';