Cómo usar una cadena NULL o vacía en SQL

129

Me gustaría saber cómo usar NULL y una cadena vacía al mismo tiempo en una WHEREcláusula en SQL Server. Necesito encontrar registros que tengan valores nulos o una cadena vacía. Gracias.

poshan
fuente
55
Hay una palabra clave OR en SQL.
Robert Harvey
13
Esta pregunta no muestra ningún esfuerzo de investigación. Es importante hacer tu tarea . Díganos qué encontró y por qué no satisfizo sus necesidades. Esto demuestra que te has tomado el tiempo para intentar ayudarte a ti mismo, nos salva de reiterar respuestas obvias y, sobre todo, te ayuda a obtener una respuesta más específica y relevante. FAQ .
Kermit
1
posible duplicado de Cómo seleccionar datos de la tabla MySQL donde una columna es NULL (esta fue una pregunta de MySQL, pero es básicamente la misma respuesta para t-sql)
Michael Berkowski

Respuestas:

234
Select *
From Table
Where (col is null or col = '')

O

Select *
From Table
Where IsNull(col, '') = ''
codingbadger
fuente
14
de acuerdo con la respuesta de @Bradc en este stackoverflow.com/questions/799584/… , mejor usar el primer enfoque.
Sameera R.
27

Simplemente puedes hacer esto:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''
Praveen Nambiar
fuente
25

Si lo necesita en la sección SELECCIONAR puede usarlo así.

    SELECT  ct.ID, 
            ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
    FROM    [dbo].[CustomerTable] ct

puede reemplazar el nullcon su valor de sustitución.

Sameera R.
fuente
1
La NVL de Oracle (var1, 'valor') se encargará del reemplazo de la cadena vacía ''. Isnull de T-SQL (var1, 'valor') no lo hace.
Jenna Leaf
15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''
John Woo
fuente
2
SELECCIONAR * DESDE TableName DONDE columnNAme ES NULO O RTRIM (columnName) = ''
Xavier John
2
Como señala Xavier, no hay necesidad de hacer AMBOS ltrimy rtrimsi el objetivo es simplemente comparar con una cadena vacía. MOTIVO: si SOLO hay un espacio en blanco, un solo recorte lo eliminará todo. Por ejemplo, no le importa si la comparación falla porque lo que queda es "abc" o "abc".
ToolmakerSteve
8

Para buscar filas donde está col NULL, cadena vacía o espacios en blanco (espacios, pestañas):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''

Para buscar filas donde está col NOT NULL, cadena vacía o espacios en blanco (espacios, pestañas):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''
Scott Sterling
fuente
7

Algunos sargable métodos ...

SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;

SELECT *
FROM #T
WHERE SomeCol = '' 
UNION ALL
SELECT *
FROM #T
WHERE  SomeCol IS NULL;

SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);

Y algunos no sargable ...

SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;

SELECT *
FROM #T
WHERE NULLIF(SomeCol,'') IS NULL;

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';
Martin Smith
fuente
3

Esto es feo MSSQL:

CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END
ADMITIR
fuente
3

mi mejor solución

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0

COALESCE devuelve el primer expr no nulo en la lista de expresiones ().

si fieldValue es una cadena nula o vacía, entonces: devolveremos el segundo elemento y luego 0.

entonces 0 es igual a 0, entonces este fieldValue es una cadena nula o vacía.

en python por ejemplo:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0

buena suerte

Anouar Mokhtari
fuente
2

compruebe nulo con IS NULL y cadena vacía con LEN (RTRIM (LTRIM (Column))) = 0 in

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL
Alireza Shabani
fuente
2
select 
   isnull(column,'') column, * 
from Table  
Where column = ''
chandu komati
fuente
1
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0
Charaf JRA
fuente
1

Puede usar la isnullfunción para obtener nullvalores vacíos y de un campo de texto:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''
Alberto De Caro
fuente
La función isnull literalmente solo verifica si el valor es nulo. No funcionará si la cadena está vacía ("").
Max Pringle
@Max Pringle. No digo de otra manera. También el código proporcionado aborda la solicitud de preguntas. No estoy seguro de tu contribución. Sugerir una edición en lugar de hacer downvoting.
Alberto De Caro
Tomaremos tu consejo. Puse una edición sugerida ahora. Esta cláusula where solo obtiene los valores nulos, no los valores de cadena vacíos. Un nullif podría usarse para obtener los valores vacíos.
Max Pringle
1
--setup
IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NAME VARCHAR(10))
INSERT INTO #T (Name) VALUES('JOHN'),(''),(NULL);
SELECT * FROM #T
 1  JOHN
 2  -- is empty string
 3  NULL

Puede examinar ''como NULLmediante la conversión a NULLutilizarNULLIF

--here you set '' to null
UPDATE #T SET NAME = NULLIF(NAME,'')
SELECT * FROM #T 
 1  JOHN
 2  NULL
 3  NULL

o se puede examinar NULLcomo ''el usoSELECT ISNULL(NULL,'')

-- here you set NULL to ''
UPDATE #T SET NAME = ISNULL(NULL,'') WHERE NAME IS NULL
SELECT * FROM #T
1   JOHN
2   -- is empty string
3   -- is empty string

--clean up
DROP TABLE #T
BTE
fuente
1

En sproc, puede usar la siguiente condición:

DECLARE @USER_ID VARCAHR(15)=NULL --THIS VALUE IS NULL OR EMPTY DON'T MATTER
IF(COALESCE(@USER_ID,'')='')
PRINT 'HUSSAM'
Mohammed Hussamuddin Hussamudd
fuente
1

por esta función:

ALTER FUNCTION [dbo].[isnull](@input nvarchar(50),@ret int = 0)
RETURNS int
AS
BEGIN

    return (case when @input='' then @ret when @input is null then @ret else @input end)

END

y usa esto:

dbo.isnull (valor, 0)

Mohsen.Sharify
fuente
1
SELECT * FROM DBO.AGENDA
WHERE 
  --IF @DT_START IS NULL OR EMPTY
  ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) -- GET ALL DATE
  OR --ELSE
  ( DT_START >= @DT_START ) --FILTER

-- MORE FILTER

SELECT * FROM DBO.AGENDA
WHERE 
  ( ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) OR ( DT_START >= @DT_START ) ) 
  AND
  DT_END < GETDATE()
Vinicius.Beloni
fuente