SQL'de NULL veya boş dize nasıl kullanılır


129

WHERESQL Server'daki bir cümlede aynı anda NULL ve boş bir dizeyi nasıl kullanacağımı bilmek istiyorum . Boş değerleri veya boş bir dizesi olan kayıtları bulmam gerekiyor. Teşekkürler.


5
SQL'de bir OR anahtar sözcüğü var.
Robert Harvey

13
Bu soru herhangi bir araştırma çabası göstermemektedir. Ödevinizi yapmak önemlidir . Bize ne bulduğunuzu ve neden ihtiyaçlarınızı karşılamadığını söyleyin . Bu, kendinize yardım etmek için zaman ayırdığınızı gösterir, bizi bariz cevapları tekrarlamaktan kurtarır ve en önemlisi daha spesifik ve alakalı bir cevap almanıza yardımcı olur. SSS .
Kermit

Yanıtlar:



27

Bunu basitçe yapabilirsiniz:

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

25

SEÇ bölümünde ihtiyacınız varsa bu şekilde kullanabilirsiniz.

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

yerine nullkoyma değerinizle değiştirebilirsiniz.


1
Oracle'ın NVL'si (var1, 'değer') boş dize '' değişimini halledecektir. T-SQL'in Isnull (var1, 'değer') yok.
Jenna Yaprak

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

2
SELECT *, columnNAme NULL OLDUĞU VEYA RTRIM (columnName) = ''
Xavier John

2
Xavier'in işaret ettiği gibi, İKİSİNİ yapmaya gerek yoktur ltrimve rtrimeğer amaç sadece boş dizgiyle karşılaştırmaksa. NEDEN: YALNIZCA boşluk varsa, tek bir kırpma hepsini kaldıracaktır. Örneğin, geriye kalan "abc" veya "abc" olduğu için karşılaştırmanın başarısız olup olmaması umurunuzda değildir.
ToolmakerSteve

8

Sütun NULL, boş dize veya boşluk (boşluklar, sekmeler) olduğu satırları bulmak için :

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

Sütun NOT NULL, boş dize veya boşluk (boşluklar, sekmeler) olduğu satırları bulmak için :

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

7

Bazı sargılı yöntemler ...

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

Ve bazı sargısız olanlar ...

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

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

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

3

Bu çirkin MSSQL:

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

3

en iyi çözümüm:

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

COALESCE, () ifade listesindeki ilk boş olmayan ifadeyi döndürür.

fieldValue null veya boş dizge ise: ikinci öğeyi sonra 0 döndürürüz.

yani 0, 0'a eşittir, bu durumda bu fieldValue boş veya boş bir dizedir.

örneğin python'da:

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

iyi şanslar


2

Bir metin alanının isnullhem nullboş değerlerini hem de almak için işlevi kullanabilirsiniz :

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

İsnull işlevi tam anlamıyla değerin boş olup olmadığını kontrol eder. Dize boşsa ("") çalışmaz.
Max Pringle

@Max Pringle. Ben farklı ifade etmiyorum. Ayrıca sağlanan kod, soru talebine yöneliktir. Katkınızdan emin değilim. Olumsuz oy kullanmak yerine bir düzenleme önerin.
Alberto De Caro

tavsiyene uyacak. Şimdi önerilen bir düzenleme ekledim. Burada yan tümce, boş dize değerlerini değil yalnızca null değerleri alır. Boş değerleri elde etmek için bir sıfırlama kullanılabilir.
Max Pringle

2

boş kontrol edersiniz IS NULL ve Dize Boş ile LEN (RTRIM (LTRIM (Sütun))) = 0

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

Kullanarak dönüştürerek inceleyebilirsiniz ''.NULLNULLNULLIF

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

ya inceleyebilirsiniz NULLolarak ''kullanarakSELECT 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

Sproc'ta aşağıdaki koşulu kullanabilirsiniz:

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

1

bu işlevle:

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

ve bunu kullan:

dbo.isnull (değeri, 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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.