मैंने देखा कि मेरे डेटाबेस में 275 ऑब्जेक्ट पर Modify_date में हमेशा 0, 3 या 7 का अंतिम मिलीसेकंड अंक होता है। यह 0/3, 1/3 (गोल नीचे) और 2/3 (गोल ऊपर) जैसा दिखता है।

मैंने अपने पूरे डेटाबेस की जांच के लिए यह प्रश्न लिखा है और यह सच है:

with a as (
select name,type_desc,modify_date, 
convert(int,DATEPART(MS,modify_date)) Mils
from sys.objects
),
 
b as (
select *,
RIGHT(Mils,1) rm
from a)
 
select * from b
order by rm

मैं सभी 275 पंक्तियों की सूची नहीं दूंगा, लेकिन वे सभी 0, 3 या 7 हैं।

मैं यह समझने के लिए उत्सुक हूं कि इस बार 3 मिलीसेकंड से अधिक सटीक नहीं होने का क्या कारण हो सकता है?

0
Lefty 24 सितंबर 2020, 19:03

2 जवाब

सबसे बढ़िया उत्तर

datetime एक सेकंड के 1/300वें हिस्से तक सटीक है। यह है दस्तावेज भी।

जैसे ही 1/300 को गोल कर दिया जाता है, तब 0.0000000 0.000, 0.003333333333 0.003 और अंत में 0.00666666666666 और 0.007 के रूप में दिखाई देगा।

यदि आप एक उच्च परिशुद्धता चाहते हैं (एक सेकंड का 1/1000वां भाग कहें), तो आपको नए datetime2 डेटा प्रकार का उपयोग करना होगा और इसे 3 (datetime2(3)) की सटीकता देनी होगी। . हालांकि कोई भी मौजूदा मान मौजूदा मानों को बनाए रखेगा।

यदि आप और भी अधिक सटीकता के लिए जाते हैं (जैसे datetime2(7)), और अपने मौजूदा कॉलम को इस डेटा प्रकार में बदलें, तो आप किस संस्करण का उपयोग कर रहे हैं, इसके आधार पर आपको अलग-अलग परिणाम मिलेंगे। नए संस्करणों में, datetime मान 2020-09-24T17:14:01.003 को 2020-09-24T17:14:01.0033333 में बदल दिया जाएगा, हालांकि पुराने संस्करणों 2020-09-24T17:14:01.0030000 में। यह कुछ ऐसा है जिसे आपको ध्यान में रखना चाहिए।

1
Larnu 24 सितंबर 2020, 19:31

अगर मैं आपका सही ढंग से अनुसरण करता हूं, तो आप अपने datetime के मिलीसेकंड घटक से अंतिम दशमलव अंक प्राप्त करना चाहते हैं।

यदि ऐसा है, तो आप datepart() और अंकगणित का उपयोग इस प्रकार कर सकते हैं:

datepart(ms, modify_date) - datepart(ms, modify_date) / 10 * 10

यह रहा एक सरलीकृत डेमो:

declare @modify_date datetime2 = getdate();
select @modify_date original, 
    datepart(ms, @modify_date) ms, 
    datepart(ms, @modify_date) - datepart(ms, @modify_date) / 10 * 10 result

original                    |  ms | result
:-------------------------- | --: | -----:
2020-09-24 17:11:36.3733333 | 373 |      3

0
GMB 24 सितंबर 2020, 19:09