sql - vacio - ¿En cuántos idiomas Null no es igual a nada ni siquiera nulo?
validar campo null sql server (7)
¿En cuántos idiomas Null no es igual a nada ni siquiera nulo?
Es de esta manera en SQL (como un lenguaje lógico) porque null significa desconocido / indefinido.
Sin embargo, en lenguajes de programación (como, por ejemplo, C ++ o C #), un puntero / referencia nulo es un valor específico con un significado específico: nada.
Dos nada son equivalentes, pero dos incógnitas no lo son. La confusión proviene del hecho de que el mismo nombre (nulo) se usa para ambos conceptos.
MySQL tiene un operador de igualdad nulo seguro, <=>, que devuelve verdadero si ambos lados son iguales o ambos lados son nulos. Vea los documentos de MySQL .
Oracle es de esta manera.
SELECT * FROM dual WHERE NULL=null; --no rows returned
En VB6, la expresión Null = Null
producirá Null
lugar de True
como es de esperar. Esto causará un error de tiempo de ejecución si intenta asignarlo a un booleano, sin embargo, si lo usa como condición de " If ... Then
", actuará como False
. Además Null <> Null
también producirá Null
, entonces:
En VB6 puedes decir que Null
no es igual a sí mismo (ni a nada más), ¡ni desigual!
Se supone que debes probarlo usando la función IsNull()
.
VB6 también tiene otros valores especiales:
-
Nothing
para referencias de objetos.Nothing = Nothing
es un error de compilación. (se supone que debes compararlo usando "is
") -
Missing
parámetros opcionales que no han sido dados. No tiene representación literal, por lo que no puede escribirMissing = Missing
. (la prueba esIsMissing(foo)
) -
Empty
para variables no inicializadas. Este hace una prueba igual a sí mismo aunque también hay una funciónIsEmpty()
. - ... avísame si he olvidado uno
Recuerdo estar un poco disgustado con VB.
En SQL, tendrías que hacer algo como:
WHERE column is NULL
más bien que
WHERE column = NULL
En C #, Nullable <bool> tiene propiedades interesantes con respecto a los operadores lógicos, pero el operador de igualdad es el mismo que otros tipos en ese idioma (es decir, ((bool?) Null == (bool?) Null) == verdadero) .
Para preservar el comportamiento en cortocircuito de los operadores lógicos en cortocircuito, y para preservar la coherencia con los operadores lógicos sin cortocircuito, el booleano nullable tiene algunas propiedades interesantes. Por ejemplo: true || null == verdadero. falso && null == falso, etc. Esto está en contradicción directa con otros lenguajes lógicos de tres valores como ANSI SQL .
Puedes hacer que Ruby funcione de esa manera:
class Null
def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null