2013-04-18 3 views
5

दिनांक के बजाय से एक घंटे मैं Oracle में एक datetime स्तंभ है (MM/DD/YYYY HH: MM: SS AM/PM):घटाना एक दिन

SELECT MAX(D_DTM)-1 FROM tbl1 

लेकिन जब मैं यह करते हैं। ..it एक दिन वापस चला जाता है। मैं एक दिन के बजाय कॉलम से एक घंटा कैसे हटा सकता हूं?

मैं भी देखा है कि MM/DD/YYYY की तरह 12:00 देखने के लिए datetime रिकॉर्ड और नहीं MM/DD/YYYY 00:00:00; मुझे यकीन नहीं है कि यह मायने रखता है।

+0

आप 12:00 मान कैसे देख रहे हैं से? क्या यह एसक्यूएलप्लस या फ्रंट-एंड लैंग्वेज (सी #, पीएचपी, आदि इत्यादि) के माध्यम से है? –

+0

टॉड का उपयोग कर, क्या इस मुद्दे का फ्रंट एंड है?मैं ओरेकल एनवी – user2061886

+0

नया हूं यह एक बात की बात हो सकती है, लेकिन मैं टॉड से परिचित नहीं हूं। यदि कॉलम में मौजूद सभी अन्य तिथियां समय घटक दिखाती हैं और "आधी रात" तिथियां नहीं होती हैं, तो मुझे लगता है कि यह मानना ​​सुरक्षित है कि "आधी रात" वास्तव में वहां है और TOAD सिर्फ "मददगार" छिप रहा है। एक सेटिंग हो सकती है जहां आप इस सुविधा को चालू या बंद कर सकते हैं, लेकिन यह सिर्फ एक अनुमान है। मुझे पता है कि .NET भाषाएं और PHP समय के हिस्से को पहचानेंगे - भले ही यह शून्य हो - और शायद बस हर दूसरी भाषा भी होगी। –

उत्तर

13

Randy's answer अच्छा है, लेकिन आप भी अंतराल का उपयोग कर सकते हैं:

SELECT MAX(D_DTM)- interval '1' hour FROM tbl1 
+0

बेहतर उत्तर आईएमओ, भविष्य में कोडर के लिए अधिक स्पष्ट है कि – user2061886

4

हाँ - तिथियां पूर्णांक दिनों से जाती हैं।

यदि आप घंटे चाहते हैं तो आप कुछ गणित करने की ज़रूरत है - जैसे -(1/24)

5

या INTERVAL समारोह का उपयोग करें। यह एक ही परिणाम है, लेकिन मैं इसे और अधिक स्पष्ट रूप से पढ़ता है लगता है - कि निश्चित रूप से सिर्फ एक राय :) है

SELECT MAX(D_DTM) - INTERVAL '1' HOUR FROM tbl1 

INTERVAL समारोह के बारे में अच्छी बात यह है कि आप अंतराल वर्ष, माह, दिन, घंटे हो कर सकते हैं , DATE मान से निपटने के दौरान मिनट या सेकंड, हालांकि महीने के अंतराल से निपटने के दौरान माह अंतराल मुश्किल हो सकता है।

और हां, उदाहरण में 1 के आसपास उद्धरण आवश्यक है।

क्योंकि यह स्थिरांक के बजाय चर स्वीकार करता है तुम भी ओरेकल विशिष्ट NumToDSInterval समारोह है, जो कम मानक लेकिन अधिक लचीला है का उपयोग कर सकते हैं:

SELECT MAX(D_DTM) - NUMTODSINTERVAL(1, 'HOUR') FROM tbl1 
2

अंतराल का उपयोग करने का एक और तरीका

NUMTODSINTERVAL(number, expression) 

है उदाहरण

NUMTODSINTERVAL(150, 'DAY') 
NUMTODSINTERVAL(1500, 'HOUR') 
NUMTODSINTERVAL(15000, 'MINUTE') 
NUMTODSINTERVAL(150000, 'SECOND') 

मैं इस अप beca लाने इसका उपयोग उन स्थितियों के लिए उपयोगी है जहां इंटरवल काम नहीं करते हैं।

1

यह आसान है।

sysdate - 5/(24 * 60 * 60) - 5/(24 * 60) - -> systime

sysdate से 5 सेकंड घटा> systime

sysdate से 5 मिनट घटा - 5/(24) -> systime

से 5 घंटे घटा इसलिए

का चयन करें (sysdate - (1/24)) दोहरी

+0

पर क्या चल रहा है, क्या आप अपने उत्तर पर थोड़ा और विस्तार कर सकते हैं, जैसे कि आप विभाजन का उपयोग क्यों कर रहे हैं? –

+0

@ कोडीगुलनर विभाजन विभाजन के दिनों के अंश के रूप में गणना कर रहा है। (1 घंटा एक दिन का 1/24 है, इसलिए 5/24 दिन 5 घंटे हैं।) घटाव दिन को घटा देता है। निजी तौर पर, हालांकि, मैं फ्लोटिंग पॉइंट त्रुटियों के बारे में चिंतित हूं। – jpmc26

+0

@ jpmc26 विचार यह है कि इस तरह की जानकारी को उत्तर में शामिल किया जाना चाहिए। –

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