declare @dt datetime
set @dt = '09-22-2007 15:07:38.850'
select dateadd(mi, datediff(mi, 0, @dt), 0)
select dateadd(hour, datediff(hour, 0, @dt), 0)
वापस होगा
2007-09-22 15:07:00.000
2007-09-22 15:00:00.000
उपरोक्त बस कुछ सेकंड और मिनटों को काटता है, जिससे प्रश्न में पूछे गए परिणाम उत्पन्न होते हैं। जैसा कि @OMG पॉनीज़ ने बताया, यदि आप राउंड अप / डाउन करना चाहते हैं, तो आप क्रमशः आधा मिनट या आधा घंटा जोड़ सकते हैं, फिर अलग करें:
select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)
और आपको मिलेगा:
2007-09-22 15:08:00.000
2007-09-22 15:00:00.000
SQL Server 2008 में दिनांक डेटा प्रकार जोड़े जाने से पहले , मैं उपरोक्त विधि का उपयोग केवल तिथि प्राप्त करने के लिए डेटटाइम से समय भाग को छोटा करने के लिए करूँगा। विचार प्रश्न में डेटाइम के बीच दिनों की संख्या और समय में एक निश्चित बिंदु निर्धारित करने के लिए है ( 0
जो, संक्षेप में 1900-01-01 00:00:00.000
)
declare @days int
set @days = datediff(day, 0, @dt)
और फिर समय के उस दिन को निश्चित बिंदु पर जोड़ दें, जो आपको निर्धारित समय के साथ मूल तिथि प्रदान करता है 00:00:00.000
:
select dateadd(day, @days, 0)
या अधिक सफलतापूर्वक:
select dateadd(day, datediff(day, 0, @dt), 0)
एक अलग DatePart का उपयोग करना (जैसे hour
, mi
) तदनुसार काम करेंगे।