2009-11-17 28 views
24

arasından seçim yapın. Bir alanın boş olup olmadığını nasıl algılar (null değil) ve ardından başka bir alan seçerse?Sütun seçin, başka bir

Gerçekten ihtiyacım olan şey, IsNull ile aynı, ancak boşluklarla birlikte çalışan bir IsBlank işlevidir.

REPLACE boşluklarla çalışmaz, COALESCE yalnızca NULLS ile çalışır.

cevap

68

COALESCE ve NULLIF'i birleştirmeye ne dersiniz?

SELECT COALESCE(NULLIF(SomeColumn,''), ReplacementColumn) 
FROM SomeTable 
+0

İlginç ... 3 sütun ile çalışmak için kolayca uzatılabilir mi? –

+2

Yanıt - evet şunları yapabilirsiniz: 'COALESCE (NULLIF (Adres2, ''), NULLIF (Adres3, ''), Adres4)' –

+0

Yanıtı, Davranış ifadesinden daha zarif olduğu için sizinkilere taşıyın. –

3

DÜZENLEME: Mssql içinde IF() kullanamazsınız.

sizin SQL SELECT kısmında bir IF deyimini kullanın:

SELECT IF(field1 != '', field1, field2) AS myfield FROM ... 
+0

Güzel, ama 2'den fazla sütun üzerinde çalışmam gerekirse bir ağrı olacaktır. –

+0

Çalışmayı başaramıyorum: SELECT IF (Adres2! = '', Adres2, Adres3) AS Sitelerden FROM '' IF 'anahtar kelimesinin yakınında yanlış sözdizimi veriyor. –

+1

Tamam, ben tam bir aptalım ve mysql ile karıştırıyorum. 'IF()' sadece mysql ile çalışıyor gibi görünüyor, bu nedenle 'O zaman SONRA SONRA DAHA FAZLA' gibi kullanın. Buraya başkalarına bir uyarı olarak bırakacağım :) – MDCore

13

Sen Hep, böyle bir şey bir ISBLANK() işlevi yazabilirsiniz bu

select 
Case WHEN Column1 = '' OR Column1 IS NULL OR LEN (TRIM (Column1)) = 0 
    THEN Column2 
    ELSE Column1 END as ColumnName 
from TableName 
+1

Bu benim tek başıma sahip olduğum şeydi ama çok unutamadım. –

2

için CASE deyimi kullanabilirsiniz

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE FUNCTION isBlank 
(
    @CheckExpression varchar, @ReplacementExpression varchar 
) 
RETURNS varchar 
AS 
BEGIN 
    IF @CheckExpression IS NOT NULL 
    BEGIN 
     IF @CheckExpression='' or LEN(@CheckExpression) = 0 
     RETURN @ReplacementExpression 
    ELSE 
     RETURN @CheckExpression 
    END 

    RETURN @ReplacementExpression 
END 
GO 
+0

Bunu destekleyebileceğinizi farzediyorum * N *, COALESCE’den beri, Raj More gibi büyük/küçük harf ifadeleriyle yaptığı açıklamaların sayısı. –

İlgili konular