2011-01-27 19 views
11

मैं एक क्षेत्र की गणना करने की कोशिश कर रहा हूं और मैं चाहता हूं कि कॉलम में से कोई एक शून्य होने पर निर्भर करता है। मैं MySQLसशर्त नहीं पूर्ण मामला एसक्यूएल

CASE 
    WHEN reply.replies <> NULL THEN 
    24/((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(qcr.LAST_MOD_TIME)+3600)/3600)*(ces.EXPERT_SCORE+2.5*scs.SIMILARITY)*(EXP(-reply.replies)) 
    ELSE 1 
END as ANSWER_SCORE 

क्या यह सही वाक्यविन्यास का उपयोग कर रहा है?

उत्तर

20

आप when reply.replies IS NOT NULL

NULL SQL में एक विशेष मामला है और = या <> ऑपरेटरों के साथ तुलना नहीं की जा सकती है की आवश्यकता है। न्यूल है और इसके बजाय न्यूल का उपयोग नहीं किया जाता है।

+2

ज़रूर इसे प्रयोग '=', '' <' and '<> तुलना की जा सकती जाँच हो रही है एक मामला वक्तव्य बना सकते हैं। तुलना का परिणाम 'NULL' है। सहमत हैं कि तीन मूल्यवान बुलियन तर्क सभी के लिए नहीं है, लेकिन आप यह नहीं कह सकते कि 'इसकी तुलना नहीं की जा सकती'। –

+0

जबकि यह दिखाता है कि केस का उपयोग कैसे करें, प्रश्न में कोड को किसी मामले की भी आवश्यकता नहीं है – RichardTheKiwi

4
case when reply.replies IS NOT NULL ... 

आप नियमित (अंकगणितीय) तुलना ऑपरेटर के साथ न्यूल की तुलना नहीं कर सकते हैं। एनयूएलएल की कोई अंकगणितीय तुलना शून्य, वापस NULL = NULL या NULL <> NULL वापस न करेगी।

इसके बजाय IS या IS NOT का उपयोग करें।

1

आपको इसके लिए केस स्टेटमेंट की आवश्यकता नहीं है।
उपयोग IFNULL function

IFNULL(24/((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(qcr.LAST_MOD_TIME)+3600)/3600) 
*(ces.EXPERT_SCORE+2.5*scs.SIMILARITY)*(EXP(-reply.replies)), 1) as ANSWER_SCORE 

तो reply.replies रिक्त है, अभिव्यक्ति
IFNULL शून्य पर शॉर्टकट है तो 2 पैरामीटर (1) लेता है और देता है कि एक परिणाम के रूप में जब यह होता है।

अन्य मामलों के लिए जहां आपको MySQL के साथ काम करने के लिए NULL, this will help you की तुलना करने की आवश्यकता है।

0

आप अशक्त

SELECT MAX(id+1), 
IF(MAX(id+1) IS NULL, 1, MAX(id+1)) 
AS id 
FROM `table_name`; 
संबंधित मुद्दे