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.