2009-07-13 6 views
51

मुझे SQL वर्ष में एक चर के रूप में वर्तमान वर्ष जोड़ने की आवश्यकता है, मैं SQL का उपयोग कर वर्तमान वर्ष को कैसे पुनर्प्राप्त कर सकता हूं?ओरेकल पर SQL का उपयोग करके मैं वर्तमान वर्ष कैसे प्राप्त करूं?

यानी

 
    BETWEEN 
    TO_DATE('01/01/**currentYear** 00:00:00', 'DD/MM/YYYY HH24:MI:SS') 
    AND 
    TO_DATE('31/12/**currentYear** 23:59:59', 'DD/MM/YYYY HH24:MI:SS') 

उत्तर

81
TO_CHAR साथ

:

select to_char(sysdate, 'YYYY') from dual; 

अपने उदाहरण में आप की तरह कुछ का उपयोग कर सकते हैं:

BETWEEN trunc(sysdate, 'YEAR') 
    AND add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60; 

तुलना मान रहे हैं कि वास्तव में क्या आप अनुरोध:

select trunc(sysdate, 'YEAR') begin_year 
    , add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60 last_second_year 
from dual; 

BEGIN_YEAR LAST_SECOND_YEAR 
----------- ---------------- 
01/01/2009 31/12/2009 
+0

धन्यवाद, आपके उत्तर के माध्यम से मैं कई अलग-अलग प्रश्नों के लिए आवश्यक एसक्यूएल बनाने में सक्षम था! –

+3

इस वर्ष के आखिरी दूसरे को पाने के लिए अगले वर्ष से एक सेकंड को घटाकर तारीखों और अनुमानित टाइमस्टैम्प के लिए काम नहीं किया जाएगा, जिसमें कोई अंशकालिक सेकंड नहीं है। यदि आप टाइमस्टैम्प और आंशिक सेकंड के साथ समाप्त होते हैं, तो कुछ मूल्य वर्तमान वर्ष के भीतर हो सकते हैं, और इस वर्ष से शुरू होने वाले 'बीच <> और - 1 सेकंड' से चूक गए हैं। अलग-अलग आरडीबीएमएस में काम करना जिसमें प्रत्येक के पास अलग-अलग सटीकताओं के साथ कई दिनांक/समय प्रकार हैं, मैं अनुशंसा करता हूं और 'start_of_this_year <= value_under_test और value_under_test <' start_of_next_year' –

52

एक अन्य विकल्प है:

SELECT * 
    FROM TABLE 
WHERE EXTRACT(YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate) 
+2

पसंद करता हूं, यह फ़ंक्शन आधारित इंडेक्स के साथ संयुक्त क्वेरी को तेज़ कर देगा। –

+1

फंक्शन आधारित इंडेक्स यहां अनियंत्रित जटिलता जोड़ देगा। एफबीआई का उपयोग क्यों करें जब आप एक साधारण इंडेक्स के साथ कर सकते हैं? – jva

+1

दिनांक_फील्ड पर एक साधारण इंडेक्स का उपयोग नहीं किया जाएगा यदि कॉलम (एक्स्ट्रैक 11 जी पर परीक्षण) पर एक फ़ंक्शन (जैसे एक्स्ट्राक्ट) लागू होता है - हालांकि यह अच्छा होगा। एक्सट्रैक्ट पर एक फ़ंक्शन-आधारित इंडेक्स (दिनांक_फील्ड से वर्ष) का उपयोग किया जा सकता है, हालांकि। –

13

उपयोग extract(datetime) समारोह यह इतना आसान, आसान है।

यह रिटर्न वर्ष, माह, दिन, मिनट, सेकंड

उदाहरण:

select extract(year from sysdate) from dual; 
+1

'निकालें 'फ़ंक्शन केवल' डेटाटाइम 'प्रकार फ़ील्ड (जैसे' sysdate') से वर्ष, महीना और दिन निकाल देगा। यह अन्य फ़ील्ड को 'टाइमस्टैम्प' फ़ील्ड से निकाल देगा हालांकि। – Gerrat

-5

ओरेकल-एसक्यूएल

select sysdate from dual; 
+3

वर्तमान तिथि प्रदर्शित करना सवाल नहीं था। –

0

में मौजूदा प्रणाली तारीख को प्रदर्शित करने के एक और विकल्प होगा :

SELECT * FROM mytable 
WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR'); 
0

दोहरी से TO_CHAR (SYSDATE, 'YYYY') का चयन करें; -

+1

सही लेकिन यह 2013 से पहले से ही शीर्ष जवाब है। –

1

हम मौत के लिए यह एक कर रहे हैं जब से तुम एक वर्ष निर्दिष्ट करने के लिए की जरूरत नहीं है:

select * from demo 
where somedate between to_date('01/01 00:00:00', 'DD/MM HH24:MI:SS') 
       and  to_date('31/12 23:59:59', 'DD/MM HH24:MI:SS'); 

हालांकि FerranB द्वारा स्वीकार कर लिया जवाब अधिक समझ में आता है अगर आप सभी दिनांक मानों कि में आते हैं निर्दिष्ट करना चाहते हैं चालू वर्ष

संबंधित मुद्दे

 संबंधित मुद्दे