2009-11-17 1 views
24

Wie erkennt man, ob ein Feld leer ist (nicht null) und dann ein anderes Feld auswählen, wenn dies der Fall ist?Spalte auswählen, wenn leer aus einem anderen auswählen

Was ich wirklich brauche, ist eine IsBlank-Funktion, die genauso funktioniert wie IsNull, aber mit Leerzeichen.

REPLACE funktioniert nicht mit Leerzeichen, COALESCE funktioniert nur mit NULLS.

Antwort

68

Wie wäre es, COALESCE und NULLIF zu kombinieren.

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

Interessant ... kann es leicht erweitert werden, um mit 3 Spalten zu arbeiten? –

+2

Antwort - Ja, Sie können: 'COALESCE (NULLIF (Adresse2, ''), NULLIF (Adresse3, ''), Adresse4)' –

+0

Verschieben Sie die Antwort auf Ihre, wie es eleganter als die Case-Anweisung ist. –

3

BEARBEITEN: Sie können IF() in mssql nicht verwenden.

eine IF-Anweisung in der SELECT-Teil Ihrer SQL verwenden:

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

Schön, aber wenn ich mehr als 2 Spalten arbeiten muss, wird ein Schmerz sein. –

+0

Ich kann nicht scheinen es funktioniert zu bekommen: 'SELECT IF (Adresse2! = '', Adresse2, Adresse3) AS Adresse FROM Sites' gibt falsche Syntax in der Nähe des Schlüsselwortes 'IF'. –

+1

Okay, ich bin total blöd und werde mit mysql verwirrt. 'IF()' scheint nur mit mysql zu funktionieren, verwenden Sie stattdessen 'CASE WHEN THEN ELSE END' wie oben. Ich werde das hier als Warnung für andere lassen :) – MDCore

13

Sie eine CASE-Anweisung für diese

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

Dies ist, was ich alleine hatte, aber ist sehr plump. –

2

konnte man immer schreiben Sie eine ISBLANK() Funktion, so etwas wie

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

Ich nehme an, Sie könnten es unterstützen * N * Anzahl der Ausdrücke, da COALESCE sowieso über Case-Anweisung wie Raj More. –