Ich möchte wissen, wie NULL und eine leere Zeichenfolge gleichzeitig in einer WHERE
Klausel in SQL Server verwendet werden. Ich muss Datensätze finden, die entweder Nullwerte oder eine leere Zeichenfolge haben. Vielen Dank.
Ich möchte wissen, wie NULL und eine leere Zeichenfolge gleichzeitig in einer WHERE
Klausel in SQL Server verwendet werden. Ich muss Datensätze finden, die entweder Nullwerte oder eine leere Zeichenfolge haben. Vielen Dank.
Antworten:
Select *
From Table
Where (col is null or col = '')
Oder
Select *
From Table
Where IsNull(col, '') = ''
Sie können dies einfach tun:
SELECT *
FROM yourTable
WHERE yourColumn IS NULL OR yourColumn = ''
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 null
durch Ihren Ersetzungswert ersetzen .
SELECT *
FROM TableName
WHERE columnNAme IS NULL OR
LTRIM(RTRIM(columnName)) = ''
ltrim
und rtrim
wenn 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.
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)),'')<>''
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,'') = '';
Das ist hässliches MSSQL:
CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END
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
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
select
isnull(column,'') column, *
from Table
Where column = ''
SELECT *
FROM Table
WHERE column like '' or column IS NULL OR LEN(column) = 0
Sie können die isnull
Funktion verwenden, um sowohl null
leere als auch leere Werte eines Textfelds abzurufen:
SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''
--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 ''
, NULL
indem Sie es in NULL
using 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 NULL
als ''
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
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'
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)
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()