web-dev-qa-db-fra.com

Mettre à jour les colonnes avec des valeurs nulles

J'ai essayé de mettre à jour une table comme suit:

update userloginstats set logouttime = sysdate where logouttime = null;

Il n'a pas mis à jour les colonnes avec des valeurs nulles. Qu'est ce qui ne s'est pas bien passé?

25
nath

Changez-le en

...where logouttime is null;
                    ^^^^^^^

NULL est une valeur spéciale et nous ne pouvons pas utiliser l'habituel = opérateur avec.

Depuis documentation Oracle pour NULL :

Pour tester les valeurs nulles, utilisez uniquement les conditions de comparaison IS NULL et IS NOT NULL. Si vous utilisez une autre condition avec null et que le résultat dépend de la valeur de null, le résultat est UNKNOWN car null représente un manque de données, un null ne peut pas être égal ou inégal à toute valeur ou à un autre null

60
codaddict

Vous ne pouvez pas comparer les valeurs NULL avec =.

Utilisez ceci:

update userloginstats set logouttime= sysdate where logouttime is null;
8
Lucero

logouttime is null, ne pas = null. null n'est jamais égal à rien, pas même à lui-même. Ainsi, l'opérateur is.

5
Donnie

Vous devez utiliser is null ne pas = null

update userloginstats set logouttime= sysdate where logouttime is null;
4
Macros

Pour les valeurs nulles, vous devez utiliser "IS NULL" ou "IS NOT NULL" plutôt que l'opérateur =. C'est parce que null n'est techniquement ni vrai ni faux, c'est plutôt l'absence de valeur dans les deux cas.

La plupart des langages de programmation associent généralement null à false pour plus de commodité (et permettent ainsi l'utilisation de l'opérateur =), mais SQL adopte une approche plus puriste, à tort ou à raison.

1
Maltronic