मैंने देखा कि मेरे डेटाबेस में 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 मिलीसेकंड से अधिक सटीक नहीं होने का क्या कारण हो सकता है?
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
में। यह कुछ ऐसा है जिसे आपको ध्यान में रखना चाहिए।
अगर मैं आपका सही ढंग से अनुसरण करता हूं, तो आप अपने 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
संबंधित सवाल
नए सवाल
sql-server
Microsoft SQL सर्वर एक रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है। कॉम्पैक्ट, एक्सप्रेस, एज़्योर, फास्ट-ट्रैक, एपीएस (पूर्व में पीडीडब्ल्यू) और एज़्योर SQL डीडब्ल्यू सहित सभी SQL सर्वर संस्करणों के लिए इस टैग का उपयोग करें। अन्य प्रकार के DBMS (MySQL, PostgreSQL, Oracle, आदि) के लिए इस टैग का उपयोग न करें। सॉफ़्टवेयर और मोबाइल विकास के मुद्दों के लिए इस टैग का उपयोग न करें, जब तक कि यह सीधे डेटाबेस से संबंधित न हो।