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.