मैंने एक प्रश्न लिखा था जिसका उपयोग मैं शीर्ष ऑरेकल में करता हूं, जिसमें मैंने फ़िल्टर जोड़े हैं, लेकिन जब मैं एक तिथि चयन जोड़ता हूं तो यह क्वेरी काम नहीं करती है (हालांकि कोई वाक्यविन्यास त्रुटियां नहीं हैं)। मैं मदद के लिए आभारी रहूंगा
select eb.ID,
eb.NAME,
eb.TEMP,
eb.ID_TRANS,
eb.CR_DATE,
eb.DATE_TMRT,
ah.name as Silo_name,
we.name as ORGANIZATIONS,
ad.name as item
from TEMPR_SILO eb
left join ORGANIZATIONS we on eb.ORGANIZATIONS = we.id
left join ITEM_CRITICALTEMP ad on ad.id <> 0
left join silo ah on ah.id = ad.id_silo
where (:P115_ORG is null or we.name = :P115_ORG)
and (:P115_SILO_NAME is null or ah.name = :P115_SILO_NAME)
and to_timestamp(eb.DATE_TMRT) between to_timestamp(:P115_DATA1,'dd.mm.yyyy') and to_timestamp(:P115_DATA2,'dd.mm.yyyy')
------ when "OR" is missing then everything works ---
or (:P115_DATA2 is null OR :P115_DATA1 is null)
group by
eb.ID,
eb.NAME,
eb.TEMP,
eb.ID_TRANS,
eb.CR_DATE,
eb.DATE_TMRT,
we.name,
ah.name,
ad.name
लेकिन फ़िल्टर की गई तिथियां निर्दिष्ट नहीं हो सकती हैं, और मुझे उपलब्ध होने के लिए सभी रिकॉर्ड चाहिए, और इसलिए "ओपी" होना चाहिए। यदि आप त्रुटि खोजने में मेरी सहायता कर सकते हैं तो मैं आभारी रहूंगा!
2 जवाब
यह मानते हुए कि एक शर्त(BETWEEN/NULL)
सही होनी चाहिए।
निम्नलिखित बदलें
and to_timestamp(eb.DATE_TMRT) between to_timestamp(:P115_DATA1,'dd.mm.yyyy') and to_timestamp(:P115_DATA2,'dd.mm.yyyy')
------ when "OR" is missing then everything works ---
or (:P115_DATA2 is null OR :P115_DATA1 is null)
प्रति
and (to_timestamp(eb.DATE_TMRT) between to_timestamp(:P115_DATA1,'dd.mm.yyyy') and to_timestamp(:P115_DATA2,'dd.mm.yyyy')
------ when "OR" is missing then everything works ---
or (:P115_DATA2 is null OR :P115_DATA1 is null))
मुझे लगता है कि यह काम करना चाहिए।
दूसरा परिदृश्य: जब सभी शर्तें या Null
शर्त सही होनी चाहिए:
(
(:P115_ORG is null or we.name = :P115_ORG)
and (:P115_SILO_NAME is null or ah.name = :P115_SILO_NAME)
and to_timestamp(eb.DATE_TMRT) between to_timestamp(:P115_DATA1,'dd.mm.yyyy') and to_timestamp(:P115_DATA2,'dd.mm.yyyy')
)
or (:P115_DATA2 is null OR :P115_DATA1 is null)
मुझे लगता है कि यह होना चाहिए था
where
( --> this
(:P115_ORG is null or we.name = :P115_ORG)
and (:P115_SILO_NAME is null or ah.name = :P115_SILO_NAME)
and to_timestamp(eb.DATE_TMRT) between to_timestamp(:P115_DATA1,'dd.mm.yyyy')
and to_timestamp(:P115_DATA2,'dd.mm.yyyy')
) --> this
--
or (:P115_DATA2 is null OR :P115_DATA1 is null)
यानी सभी AND
शर्तों को उनके अपने कोष्ठक में संलग्न करें, और OR
शर्त को उसमें से छोड़ दें।
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।
eb.DATE_TMRT
का डेटाटाइप क्या है? मुझे उस मान का उदाहरण दें जिसका आपने P115_DATA1 और P115_DATA2 में परीक्षण किया था।