2014-01-16 3 views
1

я имею ниже запрос, который я использую, чтобы обновить гендерный столбец, если его набор в Мале, а затем обновить, как M, для женщин, обновление до FПравильное использование Sql сазе

Трассы заявление штраф первый раз.

UPDATE [People].[People] 
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M' 
WHEN GENDER = 'Female' THEN 'F' END WHERE Id=40 

мой вопрос, если пол уже «M», то когда оператор выполняется снова, «M» устанавливается равным NULL

я мог бы сделать ниже, но это, кажется, немного a fudge

UPDATE [People].[People] 
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M' 
WHEN GENDER = 'Female' THEN 'F' 
    WHEN GENDER = 'M' THEN 'M' 
WHEN GENDER = 'F' THEN 'F' 
END WHERE Id=40 

Может кто-нибудь посоветуете?

спасибо

ответ

5

Добавить еще одно условие для ИНЕКЕ:

UPDATE [People].[People] 
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M' 
WHEN GENDER = 'Female' THEN 'F' END 
WHERE Id=40 
AND NOT GENDER IN ('M', 'F') 

Это позволит избежать обновления строки снова ,

4

По умолчанию существующая стоимость;

SET GENDER = CASE 
    WHEN GENDER = 'Male' THEN 'M' 
    WHEN GENDER = 'Female' THEN 'F' 
    ELSE GENDER 
END WHERE Id=40 

Или даже

SET GENDER = LEFT(GENDER, 1) 
+2

Конечно. Если вы не хотите редактировать все строки, вы также можете добавить предложение WHERE к вашему Update, чтобы касаться только строк, которые являются «Male» или «Female» (или не «M» или «F»), для того же результата , –

0

Вы можете сделать это с помощью IN

UPDATE [People].[People] 
SET GENDER = CASE WHEN GENDER in ('Male','M') THEN 'M' 
WHEN GENDER in ('Female','F') THEN 'F' END WHERE Id=40 
0

Если вы хотите обновить столбец только в том случае, если он равен 'Male' или 'Female', укажите это как дополнительный критерий для вашего заявления. И поскольку кажется, что вы хотите оставить только первый символ, вы можете использовать LEFT() или SUBSTRING(), чтобы извлечь его вместо выражения CASE.

Итак, вот вы идете:

UPDATE [People].[People] 
SET GENDER = LEFT(GENDER, 1) 
WHERE Id = 40 
AND GENDER IN ('Male', 'Female') 
;
Смежные вопросы