2011-08-09 13 views
9

मैं थोड़ी देर के लिए इस पर घूर रहा हूं और यह नहीं समझ सकता कि इसे करने के बारे में कैसे जाना है। मेरे पास पोस्ट करने के लिए वास्तव में कोई कोड नहीं है क्योंकि मुझे अभी तक इसे समझने के करीब नहीं मिला है और जो कुछ भी मैं साथ आता हूं, वह कोई समझ नहीं लेता है।टीएसक्यूएल अपडेट डेटाटाइम मिनट और सेकेंड

वैसे भी, हमारे पास एक ऐसा एप्लिकेशन है जो तालिका में अधिकतम (रीडटाइम) के आधार पर हर 5 मिनट में डेटा एकत्र करता है (लेकिन यह केवल वास्तविक मान दिखाएगा यदि समय 5 का एक बहु है और 00,000 सेकेंड है।) अधिकांश भाग के लिए, यह ठीक है, लेकिन कभी-कभी डेटा सिंक से बाहर हो जाएगा और हमारी तालिका में 0 मानों का एक समूह बन जाएगा।

वर्तमान में, हम अभी हाल ही में पढ़ रहे हैं, नवीनतम रीडटाइम को पकड़ रहे हैं, और उस नई तारीख को हार्डकोडिंग कर रहे हैं जिसे हम उपयोग करना चाहते हैं। मैं एक स्क्रिप्ट की तलाश में हूं जिसका उपयोग मैं इसे स्वचालित करने के लिए कर सकता हूं। इस प्रश्न के प्रयोजनों के लिए, हम GETDATE() का उपयोग कर सकते हैं।

DECLARE @readtime DATETIME = GETDATE() --2011-08-09 08:51:19.237 
      -- I want it to look like 2011-08-09 08:50:00.000 

उत्तर

3

निकटतम 5 मिनट तक गोल करें।

DECLARE @readtime DATETIME = 
    DATEADD(minute, 5*FLOOR(DATEDIFF(minute, 0, GETDATE())/5.0), 0) 
+0

इस मामले में 5 * मंजिल/5.0 क्या कर रहा है? – Dibstar

+0

@ डेविन - मिनटों को फ्लोट मान प्राप्त करने के लिए 5.0 द्वारा विभाजित किया गया है जो 'मंजिल' का उपयोग करके निकटतम पूर्णांक तक गोल किया गया है। मिनटों में फिर से वापस आने के लिए उस मान को 5 से गुणा किया जाता है। –

+0

उस के लिए धन्यवाद, साफ सामान! – Dibstar

0

क्या आपको यह देखा गया?

How to Round a Time in T-SQL

आप स्वीकार किए जाते हैं जवाब से RoundTime समारोह की कोशिश कर सकते।

4

इसे आजमाएं।

यह मूल रूप से 1000 से मिनट की जाँच करता है 5 से विभाज्य होने के लिए, 6 से सेकंड और एमएस, और यह प्रत्येक से शेष घटा देती है यदि वे नहीं कर रहे हैं:

DECLARE @dt datetime = '2011-08-09 08:51:19.237' 

SELECT DATEADD(
       MILLISECOND, 
       -(DATEPART(MILLISECOND, @dt) % 1000), 
       DATEADD(
         SECOND, 
         -(DATEPART(second, @dt) % 60), 
         DATEADD(
           minute, 
           -(DATEPART(minute, @dt) % 5), @dt) 
         ) 
       ) 

आउटपुट:

2011-08-09 08:50:00.000

+0

+1 जीवन इतना आसान हो सकता है –

+0

@Lieven - हमेशा नहीं, लेकिन यह तब अच्छा होता है जब यह होता है। – JNK

+0

त्वरित उत्तर के लिए धन्यवाद। मुझे यकीन नहीं है कि क्या आदमी ने इसे हटा दिया है या अगर मैं इसे नहीं ढूंढ पा रहा हूं लेकिन यह भी काम करता है। DECLARE @readtime DATETIME = DATEADD (मिनट, 5 * राउंड (DATEDIFF (मिनट, 0, GETDATE())/5, 0), 0) – Tom

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