2009-11-17 36 views
24

Làm cách nào để phát hiện xem một trường có trống không (không phải là rỗng) và sau đó chọn một trường khác nếu trường đó là?Chọn cột, nếu chọn trống từ một trang khác

Điều tôi thực sự cần là chức năng IsBlank hoạt động giống như IsNull nhưng với khoảng trống.

THAY THẾ không hoạt động với khoảng trống, COALESCE chỉ hoạt động với NULLS.

Trả lời

68

Cách kết hợp COALESCE và NULLIF.

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

Thú vị ... có thể dễ dàng mở rộng để làm việc với 3 cột không? –

+2

Trả lời - có bạn có thể: 'COALESCE (NULLIF (Address2, ''), NULLIF (Address3, ''), Address4)' –

+0

Di chuyển câu trả lời cho bạn vì nó thanh lịch hơn câu lệnh Case. –

3

EDIT: Bạn không thể sử dụng IF() trong mssql.

Sử dụng một IF tuyên bố trong phần SELECT của SQL của bạn:

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

Tốt, nhưng nếu tôi cần phải làm việc nhiều hơn 2 cột thì sẽ là một nỗi đau. –

+0

Tôi không thể làm cho nó hoạt động: 'SELECT IF (Address2! = '', Address2, Address3) AS Địa chỉ FROM Sites' cung cấp cú pháp sai gần từ khóa 'IF'. –

+1

Được rồi, tôi là một kẻ ngu ngốc và bị lẫn lộn với mysql. 'IF()' chỉ có vẻ làm việc với mysql, vì vậy thay vì sử dụng 'CASE KHI THÌ ELSE END' như trên. Tôi sẽ để lại điều này ở đây như một lời cảnh báo cho người khác :) – MDCore

13

Bạn có thể sử dụng một tuyên bố CASE cho điều này

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

Đây là những gì tôi đã có trên của riêng tôi nhưng rất vô duyên. –

2

Bạn luôn có thể viết một hàm ISBLANK(), một cái gì đó như

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

Tôi cho rằng bạn có thể làm cho nó hỗ trợ * N * số biểu thức vì COALESCE thực hiện qua tuyên bố trường hợp như Raj More. –

Các vấn đề liên quan