Come utilizzare NULL o stringa vuota in SQL


129

Vorrei sapere come utilizzare NULL e una stringa vuota allo stesso tempo in una WHEREclausola in SQL Server. Devo trovare i record che hanno valori nulli o una stringa vuota. Grazie.


5
C'è una parola chiave OR in SQL.
Robert Harvey,

13
Questa domanda non mostra alcuno sforzo di ricerca. È importante fare i compiti . Dicci cosa hai trovato e perché non ha soddisfatto le tue esigenze. Ciò dimostra che hai impiegato del tempo per cercare di aiutarti, ci salva dal ribadire risposte ovvie e soprattutto ti aiuta a ottenere una risposta più specifica e pertinente. FAQ .
Kermit,

1
possibile duplicato di Come selezionare i dati dalla tabella MySQL in cui una colonna è NULL (questa era una domanda MySQL, ma è sostanzialmente la stessa risposta per t-sql)
Michael Berkowski

Risposte:



27

Puoi semplicemente farlo:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''

25

Se ne hai bisogno nella sezione SELEZIONA puoi usare in questo modo.

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

puoi sostituirlo nullcon il tuo valore di sostituzione.


1
La NVL di Oracle (var1, 'valore') si occuperà della sostituzione della stringa vuota '. Isnull di T-SQL (var1, 'value') no.
Jenna Leaf,

15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''

2
SELEZIONA * DA TableName DOVE columnNAme È NULL O RTRIM (columnName) = ''
Xavier John

2
Come sottolinea Xavier, non c'è bisogno di fare ENTRAMBI ltrime rtrimse l'obiettivo è semplicemente quello di confrontare con una stringa vuota. MOTIVO: se c'è SOLO spazi bianchi, un singolo trim rimuoverà tutto. Ad esempio, non ti importa se il confronto fallisce perché ciò che rimane è "abc" o "abc".
ToolmakerSteve

8

Per trovare le righe in cui si trova col NULL, stringa vuota o spazi bianchi (spazi, tabulazioni):

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

Per trovare le righe in cui si trova col NOT NULL, stringa vuota o spazi bianchi (spazi, tabulazioni):

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

7

Alcuni metodi di grandi dimensioni ...

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);

E alcuni non sargable ...

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

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

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';

3

Questo è brutto MSSQL:

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

3

la mia migliore soluzione:

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

COALESCE restituisce il primo expr non nullo nell'elenco delle espressioni ().

se fieldValue è una stringa nulla o vuota allora: restituiremo il secondo elemento quindi 0.

quindi 0 è uguale a 0, quindi questo fieldValue è una stringa nulla o vuota.

in python per esempio:

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

in bocca al lupo


2

si controlla null con IS NULL e stringa vuota con LEN (RTRIM (LTRIM (colonna))) = 0 in

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL


1
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0

1

È possibile utilizzare la isnullfunzione per ottenere entrambi nulle valori vuoti di un campo di testo:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''

La funzione isnull controlla letteralmente solo se il valore è null. Non funzionerà se la stringa è vuota ("").
Max Pringle

@Max Pringle. Non lo dichiaro diversamente. Anche il codice fornito risponde alla domanda. Non sono sicuro del tuo contributo. Suggerisci una modifica invece di effettuare il downgrade.
Alberto De Caro,

seguirà il tuo consiglio. Ho inserito una modifica suggerita ora. Questa clausola where ottiene solo i valori null e non i valori stringa vuoti. Un nullif potrebbe essere utilizzato per ottenere valori vuoti.
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

Puoi esaminare ''come NULLconvertendolo in NULLusandoNULLIF

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

oppure puoi esaminare NULLcome ''usandoSELECT 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

1

In sproc, è possibile utilizzare la seguente condizione:

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

1

da questa funzione:

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

e usa questo:

dbo.isnull (valore, 0)


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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.