#sql #sql-server #sql-update
#sql #sql-сервер #sql-обновить
Вопрос:
Исходные данные
------- ---------------- ---------------- ----------------
| 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, если они не соответствуют условию. Для name: (принимает только пустую строку или символ), Для nameReason: (принимает только символ), для namedate: (принимает только дату).
Работа с записями 10mils, 30cols. Не может быть жестко.
Ответ №1:
Как я могу обновить другие строки до null, если они не соответствуют условию. Для name: (принимает только пустую строку или символ), Для nameReason: (принимает только символ), для namedate: (принимает только дату).
Похоже, вас вообще не волнует name, потому что вы готовы принять, что это либо emptystring, либо not-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='')
например, «обнулить каждую запись, где namereason или namedate пусты» / «обнулить каждую запись, в которой отсутствует значение как в namereason, так и в namedate»
Комментарии:
1. вы правы. Почему я не могу додуматься до этой идеи. facepalm теперь я сам.
2. Иногда я смотрю на что-то так долго, что тоже не могу этого увидеть. Иногда ответ приходит ко мне, когда я пишу вопрос SO, чтобы четко объяснить себя другому человеку. Иногда это не так, поэтому я просто нажимаю post и жду некоторых указателей — я думаю, в любом случае, ЭТО решает мою проблему 🙂
Ответ №2:
Пожалуйста, попробуйте это.
Update #A
set NAME=NULL, NameReason=NULL, NameDate=NULL
where NAME='' OR NameReason='' OR NameDate = ''