Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल सर्वर डेटटाइम ऑब्जेक्ट को बिगिनट (नेट टिक) में कनवर्ट करें

मैंने बहस की कि क्या इसे पोस्ट करना है क्योंकि यह इस बात पर निर्भर करता है कि SQL सर्वर में बाइनरी स्तर पर दिनांक कैसे संग्रहीत किए जाते हैं, और इसलिए यह एक बहुत ही भंगुर समाधान है। एकबारगी रूपांतरण के अलावा किसी अन्य चीज़ के लिए, मैं उस उत्तर की तरह कुछ उपयोग करूंगा जो @Solution Evangelist ने पोस्ट किया था। फिर भी, आपको यह एक अकादमिक तरीके से दिलचस्प लग सकता है, इसलिए मैं इसे वैसे भी पोस्ट करूँगा।

इस तथ्य का उपयोग करना कि DateTime2 . की सटीकता .NET में टिक अवधि के साथ मेल खाता है और दोनों 01-01-0001 00:00:00.0000000 की प्रारंभिक तिथियों पर आधारित हैं , आप DateTime . कास्ट कर सकते हैं करने के लिए DateTime2 , और फिर इसे binary(9) . पर डालें :0x07F06C999F3CB7340B

डेटाटाइम जानकारी RTL संग्रहीत की जाती है, इसलिए उलटते हुए, हमें 0x0B34B73C9F996CF007 मिलेगा ।

पहले तीन बाइट्स 01-01-0001 . के बाद से दिनों की संख्या को स्टोर करते हैं और अगले 5 बाइट्स उस दिन की मध्यरात्रि से 100ns टिक को स्टोर करते हैं, इसलिए हम दिनों की संख्या ले सकते हैं, एक दिन में टिक से गुणा कर सकते हैं और दिन के लिए बीते हुए समय का प्रतिनिधित्व करने वाले टिक जोड़ सकते हैं।

निम्नलिखित कोड निष्पादित करना:

set @date = getdate()
set @ticksPerDay = 864000000000

declare @date2 datetime2 = @date

declare @dateBinary binary(9) = cast(reverse(cast(@date2 as binary(9))) as binary(9))
declare @days bigint = cast(substring(@dateBinary, 1, 3) as bigint)
declare @time bigint = cast(substring(@dateBinary, 4, 5) as bigint)

select @date as [DateTime], @date2 as [DateTime2], @days * @ticksPerDay + @time as [Ticks]

निम्नलिखित परिणाम देता है:

DateTime                DateTime2              Ticks
----------------------- ---------------------- --------------------
2011-09-12 07:20:32.587 2011-09-12 07:20:32.58 634514088325870000

टिक्स की लौटाई गई संख्या लेना और .NET में वापस डेटटाइम में कनवर्ट करना:

DateTime dt = new DateTime(634514088325870000);
dt.ToString("yyyy-MM-dd HH:mm:ss.fffffff").Dump();

हमें sql सर्वर से तारीख वापस मिलती है:

2011-09-12 07:20:32.5870000



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2016 में सर्विस ब्रोकर एन्हांसमेंट

  2. SQL सर्वर 2005 - तालिका को प्रोग्रामेटिक रूप से निर्यात करें (इसे फिर से बनाने के लिए एक .sql फ़ाइल चलाएँ)

  3. अद्यतन आदेश पर SQL सर्वर त्रुटि - वर्तमान आदेश पर एक गंभीर त्रुटि उत्पन्न हुई

  4. SQL सर्वर आंतरिक:समस्याग्रस्त ऑपरेटर्स पं। III - सॉर्ट

  5. एसक्यूएल सर्वर समूह से पहली पंक्ति का चयन करें