आपकी तुलना काम करेगी, लेकिन यह धीमी होगी क्योंकि तिथियां प्रत्येक पंक्ति के लिए एक स्ट्रिंग में परिवर्तित हो जाती हैं। दो समय भागों की कुशलता से तुलना करने के लिए, प्रयास करें:
declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'
select (cast(@first as float) - floor(cast(@first as float))) -
(cast(@second as float) - floor(cast(@second as float)))
as Difference
लंबी व्याख्या:SQL सर्वर में एक तारीख को फ्लोटिंग पॉइंट नंबर के रूप में संग्रहीत किया जाता है। दशमलव बिंदु से पहले के अंक दिनांक का प्रतिनिधित्व करते हैं। दशमलव बिंदु के बाद के अंक समय का प्रतिनिधित्व करते हैं।
तो यहाँ एक उदाहरण दिनांक है:
declare @mydate datetime
set @mydate = '2009-04-30 19:47:16.123'
आइए इसे एक फ्लोट में बदलें:
declare @myfloat float
set @myfloat = cast(@mydate as float)
select @myfloat
-- Shows 39931,8244921682
अब कॉमा कैरेक्टर के बाद पार्ट लें, यानी समय:
set @myfloat = @myfloat - floor(@myfloat)
select @myfloat
-- Shows 0,824492168212601
इसे वापस डेटाटाइम में बदलें:
declare @mytime datetime
set @mytime = convert(datetime,@myfloat)
select @mytime
-- Shows 1900-01-01 19:47:16.123
1900-01-01 केवल "शून्य" तिथि है; आप कन्वर्ट के साथ समय भाग प्रदर्शित कर सकते हैं, उदाहरण के लिए प्रारूप 108 निर्दिष्ट कर सकते हैं, जो कि बस समय है:
select convert(varchar(32),@mytime,108)
-- Shows 19:47:16
डेटाटाइम और फ्लोट के बीच रूपांतरण बहुत तेज़ होते हैं, क्योंकि वे मूल रूप से उसी तरह संग्रहीत होते हैं।