我有一个约有100列的遗留表(90%可为空)。在这90列中,我要删除所有空字符串并将其设置为null。我知道我可以:
update table set column = NULL where column = '';
update table set column2 = NULL where column2 = '';
但这很乏味且容易出错。必须在整个桌子上做到这一点吗?
UPDATE
TableName
SET
column01 = CASE column01 WHEN '' THEN NULL ELSE column01 END,
column02 = CASE column02 WHEN '' THEN NULL ELSE column02 END,
column03 = CASE column03 WHEN '' THEN NULL ELSE column03 END,
...,
column99 = CASE column99 WHEN '' THEN NULL ELSE column99 END
这仍然是手动完成的,但是比你要痛苦的要少一些,因为它不需要你为每一列发送查询。除非你不愿意编写脚本,否则在执行此类操作时必须忍受一定的痛苦。
编辑:增加了END
小号
@OMG:为什么?大概是在指ELSE columnXX END列名,但是为什么要对TRIM费心呢?
@乔纳森·莱夫勒:这就是我的意思:
CASE TRIM(column01) WHEN ''...
对不起,我应该更清楚地表示我的意思是比较。@OMG:好的-我现在知道你的意思了,但是我重申我的问题:为什么?与简单比较与空白字符串相比,修整可能有什么好处?DBMS可能最终会对修剪过的字符串进行空白填充,因为修剪过的值可能与未修剪过的值一样长,因此您只是使它执行虚空工作,它可能会或可能不会出现虚空。
@Jonathan Leffler:因为“ \ s \ s \ s”!=“”,除非您在其上运行TRIM / etc。归类会影响该比较。
@OMG:“ \ s \ s \ s” ==“”在哪里?在任何类似于标准SQL的内容中,包含反斜杠的字符串都不能与空字符串匹配。我想这个问题被标记为MySQL-但我发现反斜杠ess重复3次的概念是一个空字符串...很奇怪。很奇怪。