如果条件不满足,则更新为null

时间:2019-03-14 02:43:59

标签: sql sql-server sql-update

原始数据

+-------+----------------+----------------+----------------+
| SeqNo |      Name      |   NameReason   |    NameDate    |
+-------+----------------+----------------+----------------+
|     1 | IronMan        | 'emptystring'' | 2019-03-01     |
|     2 | 'emptystring'' | 'emptystring'' | 'emptystring'' |
|     3 | IronMan        | 'emptystring'' | 'emptystring'' |
|     4 | IronMan        | A              | 'emptystring'' |
|     5 | 'emptystring'' | A              | 'emptystring'' |
|     6 | 'emptystring'' | 'emptystring'' | 2019-03-01     |
|     7 | IronMan        | A              | 2019-03-01     |
|     8 | 'emptystring'' | A              | 2019-03-01     |
+-------+----------------+----------------+----------------+

必填结果:

+-------+----------------+------------+------------+
| SeqNo |      Name      | NameReason |  NameDate  |
+-------+----------------+------------+------------+
|     1 | NULL           | NULL       | NULL       |
|     2 | NULL           | NULL       | NULL       |
|     3 | NULL           | NULL       | NULL       |
|     4 | NULL           | NULL       | NULL       |
|     5 | NULL           | NULL       | NULL       |
|     6 | NULL           | NULL       | NULL       |
|     7 | IronMan        | A          | 2019-03-01 |
|     8 | 'emptystring'' | A          | 2019-03-01 |
+-------+----------------+------------+------------+

查询:

update #A
set NAME=NULL, NameReason=NULL, NameDate=NULL
where NAME<>'' OR NameReason=" OR NameDate <>''

从上面的查询中,仅对SeqNo = 7完成了,我该如何对SeqNo8做呢?

如果不符合条件,如何将其他行更新为null。 对于名称:(仅接受emptyString或字符), 对于nameReason :(仅接受字符), 对于命名者:(仅接受日期)。

处理10mils记录,30cols。不能是硬编码。

2 个答案:

答案 0 :(得分:0)

  

如果不符合条件,如何将其他行更新为null。对于名称:(仅接受emptyString或字符),对于名称原因:(仅接受字符),对于命名对象:(仅接受日期)。

您似乎根本不在乎名称,因为您愿意接受它是空字符串还是非空字符串

因此,我认为您的更新仅需:

update #A
set NAME=NULL, NameReason=NULL, NameDate=NULL
where NameReason=" OR NameDate=''

这也可以写成:

update #A
set NAME=NULL, NameReason=NULL, NameDate=NULL
where not (NameReason=" and NameDate='')

例如“清除掉名称原因或命名为空的每条记录” /“清除所有名称原因和命名均缺乏值的记录”

答案 1 :(得分:0)

请尝试这个。

Update #A
set NAME=NULL, NameReason=NULL, NameDate=NULL
where NAME='' OR NameReason='' OR NameDate = ''