Verwendung von NULL oder leerer Zeichenfolge in SQL

129

Ich möchte wissen, wie NULL und eine leere Zeichenfolge gleichzeitig in einer WHEREKlausel in SQL Server verwendet werden. Ich muss Datensätze finden, die entweder Nullwerte oder eine leere Zeichenfolge haben. Vielen Dank.

poshan
quelle
5
In SQL gibt es ein OR-Schlüsselwort.
Robert Harvey
13
Diese Frage zeigt keinen Forschungsaufwand. Es ist wichtig, dass Sie Ihre Hausaufgaben machen . Sagen Sie uns, was Sie gefunden haben und warum es Ihren Anforderungen nicht entspricht. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen. Es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. FAQ .
Kermit
1
Mögliches Duplikat von Wie man Daten aus einer MySQL-Tabelle auswählt, in der eine Spalte NULL ist (dies war eine MySQL-Frage, aber es ist im Grunde die gleiche Antwort für t-sql)
Michael Berkowski

Antworten:

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

Oder

Select *
From Table
Where IsNull(col, '') = ''
Codierungsbadger
quelle
14
Laut der Antwort von @Bradc in diesem stackoverflow.com/questions/799584/… ist es besser, den ersten Ansatz zu verwenden.
Sameera R.
27

Sie können dies einfach tun:

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

Wenn Sie es im SELECT- Bereich benötigen, können Sie es wie folgt verwenden.

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

Sie können das nulldurch Ihren Ersetzungswert ersetzen .

Sameera R.
quelle
1
Die NVL von Oracle (var1, 'value') sorgt für das Ersetzen der leeren Zeichenfolge. Isnull von T-SQL (var1, 'value') tut dies nicht.
Jenna Leaf
15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''
John Woo
quelle
2
SELECT * FROM TableName WHERE columnNAme ist NULL ODER RTRIM (columnName) = ''
Xavier John
2
Wie Xavier betont, besteht keine Notwendigkeit, BEIDE zu tun, ltrimund rtrimwenn das Ziel lediglich darin besteht, mit einer leeren Zeichenfolge zu vergleichen. GRUND: Wenn es NUR Leerzeichen gibt, wird durch einen einzigen Schnitt alles entfernt. Zum Beispiel ist es Ihnen egal, ob der Vergleich fehlschlägt, weil "abc" oder "abc" übrig bleibt.
ToolmakerSteve
8

So finden Sie Zeilen, in denen sich col befindet NULL, leere Zeichenfolge oder Leerzeichen (Leerzeichen, Tabulatoren):

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

So finden Sie Zeilen, in denen sich col befindet NOT NULL, leere Zeichenfolge oder Leerzeichen (Leerzeichen, Tabulatoren):

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

Einige sargable Methoden ...

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

Und einige nicht 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
quelle
3

Das ist hässliches MSSQL:

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

meine beste Lösung:

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

COALESCE gibt den ersten Nicht-Null-Ausdruck in der Ausdrucksliste () zurück.

Wenn der fieldValue null oder eine leere Zeichenfolge ist, dann: Wir geben das zweite Element zurück, dann 0.

Wenn also 0 gleich 0 ist, ist dieser Feldwert eine Null oder eine leere Zeichenfolge.

in Python zum Beispiel:

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

Viel Glück

Anouar Mokhtari
quelle
2

Sie überprüfen null mit IS NULL und Zeichenfolge leer mit LEN (RTRIM (LTRIM (Spalte))) = 0 in

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

Sie können die isnullFunktion verwenden, um sowohl nullleere als auch leere Werte eines Textfelds abzurufen:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''
Alberto De Caro
quelle
Die isnull-Funktion prüft buchstäblich nur, ob der Wert null ist. Es funktioniert nicht, wenn die Zeichenfolge leer ist ("").
Max Pringle
@ Max Pringle. Ich sage nicht anders. Auch der angegebene Code adressiert die Fragenanfrage. Ich bin mir nicht sicher über deinen Beitrag. Schlagen Sie eine Bearbeitung vor, anstatt eine Abstimmung vorzunehmen.
Alberto De Caro
wird Ihren Rat annehmen. Ich habe jetzt einen Änderungsvorschlag eingereicht. Diese where-Klausel ruft nur die Nullwerte ab, nicht die leeren Zeichenfolgenwerte. Ein nullif könnte verwendet werden, um die leeren Werte zu erhalten.
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

Sie können dies überprüfen '', NULLindem Sie es in NULLusing konvertierenNULLIF

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

oder Sie können NULLals ''mit prüfenSELECT 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
HdO
quelle
1

In sproc können Sie die folgende Bedingung verwenden:

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

durch diese Funktion:

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

und benutze dies:

dbo.isnull (Wert, 0)

Mohsen.Sharify
quelle
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
quelle