2011-10-08 14 views
6

मेरे पास दो कॉलम वाला पहला टेबल है (पहला दिनांक) टाइमस्टैम्प है और दूसरा एक (डेटरेटर्न) डेटाटाइम कॉलम है। मुझे वर्तमान दिनांक और दिनांक के बीच अंतर प्राप्त करने की आवश्यकता है। मुमकिन?टाइमस्टैम्प और डेटाटाइम

उत्तर

9

नहीं, यह संभव नहीं है।

लोकप्रिय धारणा (और नाम स्वयं) के विपरीत, timestamp कॉलम वास्तव में समय से संबंधित नहीं है।

अस्वीकरण: इस सवाल का जवाब Sql सर्वर के लिए विशिष्ट है (प्रश्न के टैग के अनुसार), अन्य डेटाबेस इंजन अलग कार्यान्वयन यहाँ हो सकता है। *

इसके बजाय यह 64-बिट संख्या है जो लगातार बढ़ता है। संख्या का मान एक डेटाबेस में सभी तालिकाओं के बीच साझा किया जाता है जिसमें टाइमस्टैम्प कॉलम होता है। दूसरे शब्दों में, यदि आपके पास दो ऐसी सारणी हैं, तो एक पंक्ति को संशोधित करें, और दूसरी पंक्ति में एक पंक्ति को संशोधित करें, पहली तालिका में टाइमस्टैम्प का मान एक्स होगा, और दूसरी तालिका में एक्स + 1 होगा।

as per the documentation of timestamp:

प्रत्येक डाटाबेस एक काउंटर है कि प्रत्येक डालने या अपडेट करें कार्रवाई है कि एक मेज है कि डेटाबेस के भीतर एक टाइमस्टैम्प कॉलम होता है पर किया जाता है के लिए वृद्धि की जाती है है। यह काउंटर डेटाबेस टाइमस्टैम्प है। यह डेटाबेस के भीतर एक सापेक्ष समय ट्रैक करता है, वास्तविक समय नहीं जो घड़ी के साथ जुड़ा जा सकता है।

जैसे, मूल्य वास्तविक तिथि और/या समय पंक्ति सम्मिलित किया गया था या अंतिम बार संशोधित, और किसी भी तरह से इस तरह के एक दिनांक/समय में परिवर्तित नहीं किया जा सकता है से संबंधित नहीं है।

timestamp कॉलम का एकमात्र उद्देश्य कुछ अद्वितीय होना है, जो बढ़ने की गारंटी है। चूंकि मान 64 बिट है, इसलिए आपके पास 18 446 744 073 709 551 616 संचालन तक पहुंच होगी जिसके लिए मान रीसेट से पहले timestamp कॉलम की आवश्यकता होती है। यदि आपके पास एक डेटाबेस है जो प्रति सेकंड एक लाख ऐसे ऑपरेशन को संभाल सकता है, तो आपको मूल्य रीसेट से पहले 584 554 साल पहले भी इंतजार करना होगा, इसलिए मैं कहूंगा कि यह विशिष्टता आवश्यकताओं को पूरा करता है।

+0

अधिकांश समय, टाइमस्टैम्प कॉलम का अर्थ "कॉलटाइम" प्रकार और "टाइमस्टैम्प" नाम वाला कॉलम होता है। प्रकार "timestmap" के साथ कॉलम अपेक्षाकृत दुर्लभ हैं। – Andomar

+4

इस मामले में, उन्होंने विशेष रूप से कहा कि एक कॉलम एक समय-समय पर था, और दूसरा टाइमस्टैम्प था। –

+0

दूसरे शब्दों में, 'currentdate' नाम, एक गलत नामक है। यदि फ़ील्ड को अंतिम संशोधन (या प्रारंभिक सम्मिलन) की तिथि और समय पकड़ना है, तो 'टाइमस्टैम्प' गलत डेटा प्रकार है, और डेटाटाइम कॉलम और ट्रिगर या समान अधिक उपयुक्त है। –

4

timestamp एसक्यूएल सर्वर में डेटा प्रकार दिनांक या समय संग्रहीत नहीं करता है। यह कॉलम को बनाए रखने वाला एक संस्करण है जो हर बार पंक्ति अपडेट होने पर अपडेट किया जाता है। तो आपको इस कॉलम के डेटा प्रकार पर पुनर्विचार करना चाहिए

-1

यदि आपके कॉलम में (अपेक्षाकृत दुर्लभ) timestamp प्रकार है, तो लास वी। कार्ल्सन का जवाब सही है।

दोनों स्तंभ datetime प्रकार है, तो आप कर सकते हैं:

select datediff(day, dateReturn, currentdate) 
from YourTable 

datediff function देखें।

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