ऐसा लगता है कि आप अपने लिए जीवन कठिन बना रहे हैं। उन्हें शून्य छोड़ दें, फिर करें:
where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)
अगर param1
(प्रक्रिया तर्क; जीवन सरल है जब आपके पैरामीटर/चर नाम और कॉलम नाम अलग हैं ... इसलिए मैंने इसे थोड़ा स्पष्ट करने के लिए कॉलम नाम बदल दिए हैं) शून्य है इसे मूल रूप से अनदेखा किया जाता है * और सभी पंक्तियां उस हिस्से फ़िल्टर का, कॉलम मान शून्य है या नहीं। अगर param2
है नहीं शून्य तो is null
इसके लिए जाँच करें कि विफल रहता है और केवल (नहीं-शून्य) कॉलम मानों वाली पंक्तियाँ जो param2
. से मेल खाती हैं मान फ़िल्टर के उस हिस्से से मिलता है।
* किसी or
में शर्तें किसी भी क्रम में मूल्यांकन किया जा सकता है; is null
पहले चेक करें का मतलब यह नहीं है कि like
मूल्यांकन नहीं किया जाएगा - लेकिन ऑप्टिमाइज़र उस तरह की चीज़ों के बारे में बहुत स्मार्ट है