2010-04-21 12 views
14

मुझे दो DATETIME कॉलम के सबसे बड़े मान के आधार पर सूत्र के साथ एक पंक्ति को अपडेट करने की आवश्यकता है। मैं आमतौर पर ऐसा करता हूं:ग्रेटेस्ट नल कॉलम

GREATEST(date_one, date_two) 

हालांकि, दोनों कॉलम को पूर्ण होने की अनुमति है। मुझे सबसे बड़ी तारीख की आवश्यकता है, भले ही दूसरा नल हो (बेशक, मैं न्यूल की अपेक्षा करता हूं जब शून्य न हो) और GREATEST() कॉलम में से एक न्यूल होने पर शून्य लौटाता है। मैं एक और अधिक सरल विधि याद आ रही है

GREATEST(COALESCE(date_one, date_two), COALESCE(date_two, date_one)) 

लेकिन मुझे आश्चर्य है कि ...:

यह काम करने लगता है?

उत्तर

15

COALESCE(GREATEST(date_one, date_two), date_one, date_two)

+0

अच्छा! आपका बहुत बहुत धन्यवाद। मुझे उम्मीद है कि मुझे इसे ** एन ** कॉलम के लिए सामान्यीकृत करने की आवश्यकता नहीं होगी ... ;-P –

+1

ठीक है, लेकिन इसमें 2 से अधिक कॉलम शामिल हैं? अगर 10 कॉलम हैं तो क्या होगा? –

+0

@ वादिम के। अच्छा जवाब !! – sanghavi7

0

यही मेरे लिए सबसे अच्छा समाधान की तरह दिखता है। यह एनवीएल और "जादू" तिथि का उपयोग करने से बेहतर है क्योंकि अगर दोनों मान शून्य थे तो वह शून्य नहीं होगा।

1

मेरे समाधान एकाधिक स्तंभों के लिए है:

SELECT NULLIF(
    GREATEST(
    NVL(NULL,  to_date('01011980','ddmmyyyy')), --COLUMN 1 
    NVL(sysdate, to_date('01011980','ddmmyyyy')), --COLUMN 2 
    NVL(NULL,  to_date('01011980','ddmmyyyy')), --COLUMN 3 
    NVL(sysdate-1,to_date('01011980','ddmmyyyy')) --COLUMN 4 
),to_date('01011980','ddmmyyyy') 
) as greatest_date 
FROM DUAL; 
संबंधित मुद्दे