studio - <> operador en SQL
sql server management studio express (6)
Comparar algo con null
siempre dará como resultado unknown
. Es por eso que necesita usar el operador is
para comparar COALESCE
null
o usar funciones como COALESCE
o isnull
para reemplazar el null
Tengo una mesa como esta
ID Name IsDeleted
1 Yogesh Null
2 Goldy 1
Ahora cuando ejecuto esta consulta
select *
from tableName
where IsDeleted <> 1
Debería obtener el registro ID 1
, pero no lo estoy obteniendo,
Pero cuando corro esto
select *
from tableName
where IsDeleted is null
ID 1
registro ID 1
,
¿Por qué estoy enfrentando este comportamiento? ¿No es NULL <> 1
una afirmación verdadera en SQL?
IsDeleted
es un campo de tipo de bit
con Allow Null true
La práctica normal dictaría que si tenía una columna que esencialmente era un verdadero falso, sí, ningún tipo de campo, entonces debería usar un campo de bit con el valor predeterminado establecido en 0.
Entonces en tu caso anterior podrías simplemente ejecutar esto:
select *
from tableName
where IsDeleted = 0
Pero en respuesta a su pregunta anterior, si el Nulo es un valor NULL verdadero en la tabla, entonces esto funcionará para usted:
select *
from tableName
where IsDeleted is null
o
select *
from tableName
where isnull(IsDeleted,0) = 0
para obtener el registro 1 y
select *
from tableName
where IsDeleted is not null
para obtener el récord 2
Buena suerte
Pablo.
Obtenga información acerca de NULL: una comparación con NULL (en SQL estándar) arroja UNKNOWN, que no es verdadera ni falsa (y la razón por la cual no se cumple con sus expectativas).
Prueba esto:
PRINT CASE
WHEN 1 = NULL THEN ''1 = NULL''
WHEN 1 <> NULL THEN ''1 <> NULL''
ELSE ''1 is neither = NULL nor <> NULL''
END
Primero puede asegurarse de no tener un valor NULL (por ejemplo, utilizando las funciones ISNULL
o COALESCE
), o usar una condición con el operador IS NULL
o IS NOT NULL
.
usted compara diferentes tipos. en este caso es otro tipo (desconocido) y no comparable
utilice la instrucción o para comparar cada tipo separado
WHERE IsDeleted <> 1 OR IsDeleted is null
select *
from tableName
where isnull(IsDeleted,0) <> 1
select * from table
where COALESCE(IsDeleted, 0) <> 1
-- or ISNULL instead of COALESCE.
--ISNULL seems to be better in subqueries, but it''s not ANSI SQL.
o
select * from table
where IsDeleted <> 1 or IsDeleted IS NULL