2015-05-31 6 views
27

से अधिक DATE शीर्षक के अनुसार, मैं यह जांचने का एक तरीका ढूंढना चाहता हूं कि मेरे डेटा सेट कौन से प्रश्नों के माध्यम से SYSDATE से 6 महीने पहले हैं।ओरेकल एसक्यूएल - कथन

SELECT * FROM OrderArchive 
WHERE OrderDate <= '31 Dec 2014'; 

मैंने निम्नलिखित की कोशिश की है लेकिन यह एक त्रुटि देता है कि मेरा दिनांक प्रारूप गलत है। हालांकि, उस डेटा को सम्मिलित करने के लिए मैंने उस दिनांक प्रारूप का उपयोग अनुरोध/इच्छित के रूप में किया था और इसमें कोई समस्या नहीं थी।

Error at Command Line : 10 Column : 25

Blockquote

Error report -

SQL Error: ORA-01861: literal does not match format string 01861. 00000 - "literal does not match format string"

*Cause: Literals in the input must be the same length as literals in the format string (with the exception of leading whitespace). If the "FX" modifier has been toggled on, the literal must match exactly, with no extra whitespace.

*Action: Correct the format string to match the literal.

+1

अपनी तिथि 'DATE' के रूप में या' VARCHAR' के रूप में जमा कर रहे हैं की तरह है कि स्तंभ पर to_date() समारोह लागू करना चाहिए? –

+0

'DATE' उस के रूप में संग्रहीत है, और मैं उन्हें to_date का उपयोग करके परिवर्तित नहीं कर सकता – user3521826

उत्तर

30

आपकी क्वेरी स्ट्रिंग के रूप में एक शाब्दिक है, और यह मानते हुए कि अपनी तिथियाँ ठीक से जमा हो जाती है DATE के रूप में आप date literals उपयोग करना चाहिए:

SELECT * FROM OrderArchive 
WHERE OrderDate <= DATE '2015-12-31' 

आप TO_DATE (क्योंकि, उदाहरण के लिए, आपकी क्वेरी मूल्य उपयोग करना चाहते हैं एक शाब्दिक नहीं है), मेरा सुझाव है कि आप NLS_DATE_LANGUAGE पैरामीटर को स्पष्ट रूप से सेट करें क्योंकि आप यूएस संक्षिप्त नामों का उपयोग कर रहे हैं। इस तरह, यह कुछ स्थानीय Oracle स्थापना पर नहीं तोड़ देगा:

SELECT * FROM OrderArchive 
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY', 
          'NLS_DATE_LANGUAGE = American'); 
17
you need to convert the string to date using to_date() function 

SELECT * FROM OrderArchive 
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY'); 

या

SELECT * FROM OrderArchive 
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY'); 

या

SELECT * FROM OrderArchive 
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd'); 

यह तभी OrderDateDate format में संग्रहित है काम करेंगे । अगर ऐसा है Varchar आप भी

SELECT * FROM OrderArchive 
    WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd'); 
संबंधित मुद्दे