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 Ponies ने बताया, यदि आप ऊपर/नीचे चक्कर लगाना चाहते हैं, तो आप क्रमशः आधा मिनट या आधा घंटा जोड़ सकते हैं, फिर छोटा करें:
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 सर्वर 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)
किसी भिन्न दिनांक भाग का उपयोग करना (उदा. hour
, mi
) तदनुसार काम करेगा।