2009-11-17 16 views
24

से चयन कैसे एक का पता लगाने के लिए कि क्या एक क्षेत्र को खाली (शून्य नहीं है) और फिर एक और क्षेत्र का चयन करता है, तो यह है है?स्तंभ का चयन करें, खाली है, तो एक और

मैं वास्तव में क्या जरूरत है एक ISBLANK फ़ंक्शन कि IsNull के रूप में लेकिन कारतूस के साथ साथ एक ही काम करता है।

REPLACE कारतूस के साथ काम नहीं करता है, COALESCE केवल NULLS साथ काम करता है।

उत्तर

68

COALESCE और NULLIF के संयोजन के बारे में कैसे।

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

दिलचस्प ... क्या इसे आसानी से 3 कॉलम के साथ काम करने के लिए बढ़ाया जा सकता है? –

+2

उत्तर - हाँ तुम कर सकते: 'COALESCE (NULLIF (पता 2, ''), NULLIF (पता 3, ''), Address4)' –

+0

तुम्हारा का जवाब चलती के रूप में यह मामला बयान की तुलना में अधिक सुंदर है। –

3

संपादित करें: आप mssql में IF() उपयोग नहीं कर सकते।

अपने एसक्यूएल का चयन हिस्से में एक अगर बयान का उपयोग करें:

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

अच्छा, लेकिन अगर मुझे 2 से अधिक कॉलम काम करने की ज़रूरत है तो दर्द होगा। –

+0

मैं इसे काम करना आरंभ नहीं कर पा रहे: 'चयन करते हैं (पता 2 = '! अगर', पता 2, पता 3) Sites' से पता के रूप में कीवर्ड के पास गलत वाक्य रचना देता है '। –

+1

ठीक है, मैं कुल डंबस हूं और mysql के साथ उलझन में हूं। 'अगर()' केवल mysql के साथ काम करता प्रतीत होता है, तो उपर्युक्त के रूप में 'फिर जब ईएलईई अंत' का उपयोग करें। मैं इसे दूसरों को चेतावनी के रूप में यहां छोड़ दूंगा :) – MDCore

13

आप इस

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

यही वह है जो मुझे अपने पास मिला था लेकिन बहुत ही अनजाने में है। –

2

के लिए एक CASE बयान उपयोग कर सकते हैं तुम हमेशा एक ISBLANK() समारोह की तरह कुछ लिख सकता है,

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

मुझे लगता है कि आप इसका समर्थन कर सकते हैं * एन * अभिव्यक्तियों की संख्या क्योंकि COALESCE राज मोर जैसे केस स्टेटमेंट के माध्यम से वैसे भी करता है। –

संबंधित मुद्दे