दिलचस्प पोस्ट
MySQL – स्ट्रिंग लम्बाई से डेटा का चयन कैसे करें एंड्रॉइड प्रोजेक्ट को बाहरी .जर फ़ाइल आयात करना जावा वेबपैड में मैं अपने सर्वर पर एक छवि को कैसे सहेज और पुनः प्राप्त करता हूं सीएसवी में दोहरे उद्धरण से बचें JQuery के साथ एक इनपुट बॉक्स के अंदर स्ट्रिंग का चयन करना एक .js फ़ाइल में जावास्क्रिप्ट रखो या इसे कई .js फाइलों में विभाजित करें? JQuery और regex का उपयोग करके ईमेल पते की पुष्टि करना डेटाटेल में एक्सेल शीट को पढ़ने का सर्वोत्तम / सबसे तेज़ तरीका है? JSON और असमर्थित क्षेत्रों से निपटने एक लूप के भीतर संशोधित एक चर याद नहीं है आप एक बुफ़ेदार छवि कैसे क्लोन करते हैं पीडीओ के साथ पंक्ति गिनती सी में पिछली पाठ फ़ाइल को पढ़ना टाइमस्टैंप को बदलने के बिना git rebase सफारी, आईफ़ोन और आईपैड में एचटीएमएल 5 वीडियो टैग काम नहीं कर रहा है

एसक्यूएल सर्वर में एक तिथि को कम करने का सबसे अच्छा तरीका क्या है?

अगर मेरे पास 2010-03-01 17:34:12.018 जैसे कोई दिनांक मान है

इसे 2010-03-01 00:00:00.000 में बदलने का सबसे कारगर तरीका क्या है?

एक द्वितीयक प्रश्न के रूप में, ओरेकल के TRUNC समारोह का अनुकरण करने का सबसे अच्छा तरीका क्या है, जो आपको साल, तिमाही, महीना, सप्ताह, दिन, घंटा, मिनट और दूसरी सीमाओं में कम करने की अनुमति देगा?

वेब के समाधान से एकत्रित समाधान "एसक्यूएल सर्वर में एक तिथि को कम करने का सबसे अच्छा तरीका क्या है?"

निकटतम पूरे दिन के दौर में, व्यापक उपयोग में तीन दृष्टिकोण हैं पहले दिनांक 0 दिनांक समय के बाद से दिनों की संख्या का पता लगाने के लिए datediff का उपयोग करता है। 0 दिनांक समय 1 जनवरी, 1 9 00 से मेल खाती है। शुरुआत की तारीख में दिन के अंतर को जोड़कर, आप पूरे दिन गोल कर चुके हैं;

 select dateadd(d, 0, datediff(d, 0, getdate())) 

दूसरी विधि पाठ आधारित है: यह पाठ विवरण को varchar(10) साथ छोटा करता है, केवल दिनांक भाग छोड़कर:

 select convert(varchar(10),getdate(),111) 

तीसरी विधि इस तथ्य का उपयोग करती है कि 1 9 00 के बाद से दिन की संख्या का प्रतिनिधित्व करने वाला datetime वास्तव में एक फ्लोटिंग बिंदु है। अतः पूरे नंबर पर गोल करके, उदाहरण के लिए floor का उपयोग करके, आपको दिन की शुरुआत मिलती है:

 select cast(floor(cast(getdate() as float)) as datetime) 

अपने दूसरे प्रश्न का उत्तर देने के लिए, सप्ताह की शुरुआत पेचीदा है एक ही तरीका है कि सप्ताह के दिन को घटाना है:

 select dateadd(dd, 1 - datepart(dw, getdate()), getdate()) 

यह एक समय का हिस्सा भी देता है, इसलिए आपको पहली तारीख तक पहुंचने के लिए समय-स्ट्रिपिंग तरीकों में से एक को जोड़ना होगा। उदाहरण के लिए, @start_of_day पठनीयता के लिए एक चर के रूप में:

 declare @start_of_day datetime set @start_of_day = cast(floor(cast(getdate() as float)) as datetime) select dateadd(dd, 1 - datepart(dw, @start_of_day), @start_of_day) 

वर्ष, महीने, घंटा और मिनट की शुरुआत अभी भी "1 9 00 से अंतर" दृष्टिकोण के साथ काम करती है:

 select dateadd(yy, datediff(yy, 0, getdate()), 0) select dateadd(m, datediff(m, 0, getdate()), 0) select dateadd(hh, datediff(hh, 0, getdate()), 0) select dateadd(mi, datediff(mi, 0, getdate()), 0) 

द्वितीय को गोल करने के लिए एक अलग दृष्टिकोण की आवश्यकता होती है, क्योंकि 0 बाद से सेकेंड की संख्या एक अतिप्रवाह देता है। इसके आसपास एक रास्ता है, 1 9 00 की बजाय, दिन की शुरुआत का उपयोग, एक संदर्भ तिथि के रूप में:

 declare @start_of_day datetime set @start_of_day = cast(floor(cast(getdate() as float)) as datetime) select dateadd(s, datediff(s, @start_of_day, getdate()), @start_of_day) 

5 मिनट तक गोल करने के लिए, मिनट गोलाई विधि समायोजित करें। मिनट के अंश का भागफल लें, उदाहरण के लिए /5*5 :

 select dateadd(mi, datediff(mi,0,getdate())/5*5, 0) 

यह क्वार्टर और आधे घंटों के लिए भी काम करता है।

यदि आप SQL Server 2008 का उपयोग कर रहे हैं, तो आप इस तरह की नई Date डेटाटाइप का उपयोग कर सकते हैं:

 select cast(getdate() as date) 

यदि आपको अभी भी अपने मूल्य की आवश्यकता है, तो आप इसे DateTime डेटाटाइप बना सकते हैं:

 select cast(cast(getdate() as date) as datetime) 

एक विधि जो SQL सर्वर के सभी संस्करणों पर काम करनी चाहिए:

 select cast(floor(cast(getdate() as float)) as datetime) 

प्रयत्न:

 SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) 

अद्यतन करें: दूसरे प्रश्न पर उत्तर: वर्षों से आप मेरे उत्तर का थोड़ा संशोधित संस्करण का उपयोग कर सकते हैं:

 SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) 

तिमाही के लिए:

 SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0) 

और इसी तरह।

मैंने जाँच की, मिनटों तक – यह ठीक है लेकिन सेकंड पर मुझे एक अतिप्रवाह संदेश मिला है:

दो दिनांक समय कॉलम का अंतर रनटाइम पर ओवरफ्लो का कारण बना।

एक और अद्यतन: एक ही सवाल के लिए निम्नलिखित उत्तर पर एक नज़र डालें

यह देर हो चुकी है, लेकिन पोस्ट में अनुरोधित सटीक परिणाम उत्पन्न करेगा। मुझे यह भी लगता है कि यह dateadd का उपयोग करने से अधिक सहज है, लेकिन यह मेरी वरीयता है

 declare @SomeDate datetime = '2010-03-01 17:34:12.018' SELECT DATEFROMPARTS( YEAR(@SomeDate) ,MONTH(@SomeDate) ,'01' ) AS CUR_DATE_FROM_PARTS ,DATETIMEFROMPARTS( YEAR(@SomeDate) ,MONTH(@SomeDate) ,'01' --DAY(@SomeDate) ,'00' --DATEPART(HOUR,@SomeDate) ,'00' --DATEPART(MINUTE,@SomeDate) ,'00' --DATEPART(SECOND,@SomeDate) ,'00' --DATEPART(MILLISECOND,@SomeDate) ) AS CUR_DATETIME_FROM_PARTS ,@SomeDate AS CUR_DATETIME ,YEAR(@SomeDate) AS CUR_YEAR ,MONTH(@SomeDate) AS CUR_MONTH ,DAY(@SomeDate) AS CUR_DAY ,DATEPART(HOUR,@SomeDate) AS CUR_HOUR ,DATEPART(MINUTE,@SomeDate) AS CUR_MINUTE ,DATEPART(SECOND,@SomeDate) AS CUR_SECOND ,DATEPART(MILLISECOND,@SomeDate) AS CUR_MILLISECOND FROM Your_Table 

कटौती तिथि: 2010-03-01

कटौती दिनांकटाइम: 2010-03-01 00: 00: 00.000

दिनांक समय: 2010-03-01 17: 34: 12.017