SELECT GETDATE()
यह दिखाता है: 2008-09-22 15:24:13.790
मैं समय भाग के बिना वह तिथि भाग चाहता हूं: 2008-09-22 00:00:00.000
मुझे वह कैसे मिल सकता है?
SELECT GETDATE()
यह दिखाता है: 2008-09-22 15:24:13.790
मैं समय भाग के बिना वह तिथि भाग चाहता हूं: 2008-09-22 00:00:00.000
मुझे वह कैसे मिल सकता है?
जवाबों:
पर SQL Server 2008
और अधिक है, आपको चाहिए CONVERT
तारीख को:
SELECT CONVERT(date, getdate())
पुराने संस्करणों पर, आप निम्न कार्य कर सकते हैं:
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
उदाहरण के लिए
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
मुझे देता है
2008-09-22 00:00:00.000
पेशेवरों:
varchar
<-> datetime
रूपांतरण आवश्यक हैlocale
जैसा कि माइकल द्वारा सुझाया गया है
इस संस्करण का उपयोग करें: SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
select getdate()
SELECT DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
SELECT DATEADD(hh, 0, DATEDIFF(hh, 0, getdate()))
SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))
SELECT DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
SELECT DATEADD(mm, 0, DATEDIFF(mm, 0, getdate()))
SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
SELECT DATEADD(yy, 0, DATEDIFF(yy, 0, getdate()))
आउटपुट:
2019-04-19 08:09:35.557
2019-04-19 08:00:00.000
4763-02-17 00:00:00.000
2019-04-19 00:00:00.000
2019-04-19 00:00:00.000
2019-04-01 00:00:00.000
1903-12-03 00:00:00.000
2019-01-01 00:00:00.000
1900-04-30 00:00:00.000
datetime
डेटा प्रकार नहीं हो सकता सब पर कोई समय । मुझे लगता है कि आप उपयोगकर्ता प्रस्तुति के साथ डेटा स्टोरेज को भ्रमित कर रहे हैं। यदि आप चाहते हैं कि एक उपयोगकर्ता को एक स्ट्रिंग दिखाने का एक तरीका है जिसमें कोई समय भाग नहीं है (शून्य नहीं है, सिर्फ रिक्त है) तो आप बस चाहते हैं Convert(varchar(30), @Date, 101)
या कुछ इसी तरह। SQL सर्वर पुस्तकें ऑनलाइन देखें • कास्ट करें और अधिक जानकारी के लिए कनवर्ट करें ।
CAST(... AS DATE)
या CONVERT(DATE, ...)
, जिसका उल्लेख इस पृष्ठ पर अक्सर किया गया है।
SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)
क्योंकि तब dd
किसी अन्य datepart
कीवर्ड के लिए आपके datetime
मनमाने स्तर पर छांटने के लिए स्वैप किया जा सकता है।
SQLServer 2008 में अब एक 'दिनांक' डेटा प्रकार होता है जिसमें केवल एक दिनांक होती है जिसमें कोई समय घटक नहीं होता है। SQLServer 2008 और उसके बाद का उपयोग करने वाला कोई भी व्यक्ति निम्नलिखित कार्य कर सकता है:
SELECT CONVERT(date, GETDATE())
यदि SQL 2008 और इसके बाद के संस्करण का उपयोग कर रहे हैं:
select cast(getdate() as date)
DateTime2
इसके बजाय उपयोग करें और यह ठीक काम करता है। sqlfiddle.com/# -6
2015-10-01
कारण है DateTime
। किसी भी कलाकारों के बिना Date
, यह 2015-10-01
भी पैदावार की कोशिश करो ! declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1
=>2015-10-01
DATEADD और DATEDIFF, वरचेरिंग से बेहतर है। दोनों प्रश्नों में एक ही निष्पादन योजना है, लेकिन निष्पादन योजनाएं मुख्य रूप से डेटा एक्सेस रणनीतियों के बारे में हैं और सभी टुकड़ों को निष्पादित करने के लिए हमेशा सीपीयू समय में शामिल निहित लागत को प्रकट नहीं करते हैं। यदि दोनों क्वेरीज़ को लाखों पंक्तियों वाली तालिका के विरुद्ध चलाया जाता है, तो DateDiff का उपयोग करने वाला CPU समय Convert CPU समय के 1 / 3rd के करीब हो सकता है!
प्रश्नों के लिए निष्पादन योजना देखने के लिए:
set showplan_text on
GO
DATEADD और DatedIFF दोनों एक CONVERT_IMPLICIT को क्रियान्वित करेंगे।
हालांकि CONVERT समाधान सरल और पढ़ने में आसान कुछ के लिए है, यह है धीमी। डेटाटाइम में वापस जाने की आवश्यकता नहीं है (यह सर्वर द्वारा किया गया है)। DateAdd के लिए DateDiff पद्धति में भी कोई वास्तविक आवश्यकता नहीं है क्योंकि पूर्णांक परिणाम भी अनुमानित रूप से वापस डेटाटाइम में परिवर्तित हो जाएगा।
कनेक्ट कंवर्ट (varchar, MyDate, 101) DatesTable से
|--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
DATEADD का चयन करें (dd, 0, DatedIFF (dd, 0, MyDate)) DatesTable से
|--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
@Digi के रूप में FLOOR () का उपयोग करने से डेटडिफ़ के करीब प्रदर्शन होता है, लेकिन फ्लोट करने के लिए डेटाइम डेटा प्रकार को कास्टिंग के रूप में अनुशंसित नहीं किया जाता है और हमेशा मूल मूल्य प्राप्त नहीं होता है।
याद रखें दोस्तों: किसी पर विश्वास न करें। प्रदर्शन के आँकड़ों को देखें, और इसे स्वयं परखें!
जब आप अपने परिणामों का परीक्षण कर रहे हों तो सावधान रहें। क्लाइंट के लिए कई पंक्तियों का चयन करने से प्रदर्शन अंतर छिप जाएगा क्योंकि गणनाओं को निष्पादित करने के लिए नेटवर्क पर पंक्तियों को भेजने में अधिक समय लगता है। इसलिए सुनिश्चित करें कि सभी पंक्तियों के लिए कार्य सर्वर द्वारा किया जाता है लेकिन क्लाइंट को कोई पंक्तियाँ नहीं भेजी जाती हैं।
जब कैश ऑप्टिमाइज़ेशन प्रश्नों को प्रभावित करता है, तो कुछ लोगों के लिए भ्रम की स्थिति प्रतीत होती है। एक ही बैच में या अलग-अलग बैच में दो क्वेरी चलाने से कैशिंग पर कोई प्रभाव नहीं पड़ता है। तो आप या तो कैश को मैन्युअल रूप से समाप्त कर सकते हैं या केवल प्रश्नों को कई बार आगे-पीछे चला सकते हैं। क्वेरी # 2 के लिए कोई भी अनुकूलन किसी भी बाद के प्रश्नों को प्रभावित करेगा, इसलिए यदि आप चाहें तो निष्पादन # 1 को बाहर फेंक दें।
यहां पूर्ण परीक्षण स्क्रिप्ट और प्रदर्शन परिणाम हैं जो साबित करते हैं कि डेटडिफ़ को वार्चर में परिवर्तित करने की तुलना में काफी तेज है।
इसे इस्तेमाल करे:
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
उपर्युक्त कथन आपके वर्तमान प्रारूप को परिवर्तित करता है YYYY/MM/DD
, कृपया अपना पसंदीदा प्रारूप चुनने के लिए इस लिंक को देखें ।
mm/dd/yyyy
प्रारूप है।
फॉर्मेट में वापसी के लिए
CAST (आदेश तिथि के अनुसार)
उपरोक्त कोड sql सर्वर 2010 में काम करेगा
यह 12/12/2013 की तरह लौटेगा
SQL सर्वर 2012 के लिए नीचे दिए गए कोड का उपयोग करें
CONVERT(VARCHAR(10), OrderDate , 111)
आप CONVERT
केवल दिनांक को वापस करने के लिए फ़ंक्शन का उपयोग कर सकते हैं । नीचे दिए गए लिंक को देखें:
SQL सर्वर 2000 में दिनांक और समय हेरफेर
कन्वर्ट फ़ंक्शन का उपयोग करने के लिए सिंटैक्स है:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
यदि आपको ए के रूप में परिणाम की आवश्यकता है varchar
, तो आपको गुजरना चाहिए
SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26
जो पहले ही ऊपर उल्लेखित है।
यदि आपको दिनांक और समय प्रारूप में परिणाम की आवश्यकता है, तो आपको नीचे दिए गए किसी भी प्रश्न का उपयोग करना चाहिए
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 111)) AS OnlyDate
2014-03-26 00: 00: 00.000
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 112)) AS OnlyDate
2014-03-26 00: 00: 00.000
DECLARE @OnlyDate DATETIME
SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
SELECT @OnlyDate AS OnlyDate
2014-03-26 00: 00: 00.000
Format()
फ़ंक्शन का उपयोग करें ।
SQL सर्वर के लिए पहले से ही कई उत्तर और स्वरूपण प्रकार हैं। लेकिन अधिकांश विधियां कुछ अस्पष्ट हैं और आपके लिए प्रारूप प्रकार या फ़ंक्शन के लिए संख्याओं को याद रखना मुश्किल होगा, जो दिनांक प्रारूप के संबंध में हैं। इसलिए SQL सर्वर के अगले संस्करणों में बेहतर विकल्प है।
FORMAT ( value, format [, culture ] )
संस्कृति विकल्प बहुत उपयोगी है, क्योंकि आप अपने दर्शकों के अनुसार तिथि निर्दिष्ट कर सकते हैं।
आपको डी (छोटे पैटर्न के लिए) और डी (लंबे पैटर्न के लिए) याद रखना होगा।
2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)
2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)
क्वेरी में और उदाहरण।
DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result';
SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';
US English Result Great Britain English Result German Result Simplified Chinese (PRC) Result
---------------- ----------------------------- ------------- -------------------------------------
10/1/2011 01/10/2011 01.10.2011 2011/10/1
US English Result Great Britain English Result German Result Chinese (Simplified PRC) Result
---------------------------- ----------------------------- ----------------------------- ---------------------------------------
Saturday, October 01, 2011 01 October 2011 Samstag, 1. Oktober 2011 2011年10月1日
यदि आप अधिक प्रारूप चाहते हैं, तो आप यहां जा सकते हैं:
यदि आप CONVERT का उपयोग करना चाहते हैं और मूल आउटपुट के रूप में वही आउटपुट प्राप्त करना चाहते हैं, जो कि, yyyy-mm-dd है, तो CONVERT(varchar(10),[SourceDate as dateTime],121)
पिछले कोड के उत्तर के समान कोड का उपयोग करें , लेकिन डैश के साथ yyyy-mm-dd में कनवर्ट करने के लिए कोड है 121।
अगर मैं अपने सोपबॉक्स पर एक सेकंड के लिए प्राप्त कर सकता हूं, तो इस तरह का स्वरूपण डेटा टियर में नहीं होता है , और यही कारण है कि वास्तविक दिनांकित डेटा प्रकार होने पर SQL सर्वर 2008 तक मूर्खतापूर्ण उच्च-ओवरहेड 'ट्रिक्स' के बिना यह संभव नहीं था। की शुरुआत की। डेटा टियर में इस तरह के रूपांतरण करना आपके DBMS पर ओवरहेड की एक बड़ी बर्बादी है, लेकिन इससे भी महत्वपूर्ण बात यह है कि दूसरा आप कुछ इस तरह से करते हैं, आपने मूल रूप से इन-मेमोरी अनाथ डेटा बनाया है जो मुझे लगता है कि आप एक कार्यक्रम में वापस आ जाएंगे। आप इसे वापस किसी अन्य 3NF + कॉलम में नहीं डाल सकते हैं या इसकी पुनरावृत्ति के बिना टाइप किए गए किसी भी चीज़ से तुलना कर सकते हैं, इसलिए आपने जो कुछ भी किया है वह विफलता के बिंदुओं को प्रस्तुत किया है और संबंधपरक संदर्भ को हटा दिया है।
आपको हमेशा आगे बढ़ना चाहिए और अपने डेटटाइम डेटा प्रकार को कॉलिंग प्रोग्राम में और PRESENTATION tier में वापस करना चाहिए , जो भी समायोजन आवश्यक हो, करें। जैसे ही आप कॉल करने वाले को वापस करने से पहले चीजों को रूपांतरित करते हैं, आप एप्लिकेशन से सभी संदर्भात्मक अखंडता की उम्मीद को हटा रहे हैं। यह तब तक एक अद्यतन या DELETE कार्रवाई को रोक देगा, जब तक कि आप किसी प्रकार का मैनुअल उलट नहीं करते हैं, जो फिर से आपके डेटा को मानव / कोड / ग्रेमलिन त्रुटि को उजागर कर रहा है जब कोई आवश्यकता नहीं होती है।
WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);
- कॉलम से समय निकालने का कोई कारण नहीं है।
@Date
शून्य काल भाग में इनपुट काम करता है । यदि यह सच नहीं है, तो आपको अभी भी यह जानने की जरूरत है कि सर्वर-साइड को कैसे ट्रंक किया जाए। मैं इस जवाब से सहमत हूं कि फ़ॉर्मेटिंग को प्रस्तुति परत पर छोड़ दिया जाना चाहिए, लेकिन मैं इस निहितार्थ से सहमत नहीं था कि आगे के अंत के लिए छोड़ने का मतलब है कि आपको ट्रंक करने का एक त्वरित तरीका जानने की ज़रूरत नहीं है।
SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)
SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))
संपादित करें: पहले दो तरीके अनिवार्य रूप से समान हैं, और बाहर कन्वर्ट करने के लिए varchar विधि करते हैं।
select dateadd(dd, datediff(dd, 0, getdate()), 0)
, क्योंकि dd
एस को फिर से किसी के लिए भी स्वैप किया जा सकता हैdatepart
कीवर्ड किसी भी खंड आप चुनते हैं पर तारीख क्लिप करने के लिए। (यह भी ध्यान दें कि dd
यह केवल एक संक्षिप्त नाम है day
।)
संकेतित परिणाम प्राप्त करने के लिए, मैं निम्नलिखित कमांड का उपयोग करता हूं।
SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
मुझे लगता है कि यह उपयोगी है।
Convert(nvarchar(10), getdate(), 101) ---> 5/12/14
Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014
मुझे लगता है कि यह आपके मामले में काम करेगा:
CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25
ठीक है, हालांकि मैं थोड़ा देर से :), यहाँ एक और समाधान है।
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)
परिणाम
2008-09-22 00:00:00.000
और यदि आप SQL Server 2012 और उच्चतर का उपयोग कर रहे हैं तो आप FORMAT()
इस तरह से फंक्शन का उपयोग कर सकते हैं -
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')
यहां तक कि प्राचीन MSSQL सर्वर 7.0 का उपयोग करते हुए, यहां कोड (इस लिंक के सौजन्य से ) ने मुझे उस समय के लिए जो भी तारीख का प्रारूप मिल रहा था, प्राप्त करने की अनुमति दी:
PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110)
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6)
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)
इसने इस उत्पादन का उत्पादन किया:
1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015 1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630
तारीख:
सेनेट कंवर्ट (तारीख, GETDATE) () चयन तिथि (तिथि के अनुसार) ()
समय:
सेनेट कंवर्ट (समय, GETDATE) (114) सेलेक्ट कास्ट (GETDATE () समय के अनुसार)
बस आप इस तरह से कर सकते हैं:
SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
आउटपुट के रूप में:
2008-09-22 00:00:00.000
या बस इस तरह से करें:
SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'
परिणाम:
Date Part Only
--------------
2013-07-14
आप DATE_FORMAT (your_datetiem_column, '% d-% m-% Y) का उपयोग क्यों नहीं करते?
पूर्व: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name
आप फिर से व्यवस्थित कर प्राप्त की मीटर, डी और साल अनुक्रम को बदल सकते हैं '%d-%m-%Y'
हिस्सा
मुझे पता है कि यह पुराना है, लेकिन मैं यह नहीं देखता कि किसी ने इसे इस तरह कहां कहा है। मैं जो बता सकता हूं, यह एएनएसआई मानक है।
SELECT CAST(CURRENT_TIMESTAMP AS DATE)
यदि Microsoft ANSI मानक CURRENT_DATE चर का भी समर्थन कर सकता है तो अच्छा होगा।
select {fn current_date()} as today
मेरे लिये कार्य करता है।
मैं निम्नलिखित का पक्ष लेता हूं जिसका उल्लेख नहीं किया गया था:
DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))
यह स्थानीय के बारे में भी परवाह नहीं करता है या एक डबल कन्वर्ट नहीं करता है - हालांकि प्रत्येक 'तारीख' शायद गणित करता है। तो यह दिनांकित विधि की तुलना में थोड़ा धीमा हो सकता है, लेकिन मेरे लिए यह बहुत अधिक स्पष्ट है। खासकर तब जब मैं सिर्फ साल और महीने के हिसाब से समूह बनाना चाहता हूं (दिन को 1 पर सेट करें)।
इस स्थिति में, केवल दिनांक, आप हम इस प्रश्न को चलाने वाले हैं:
आप दिनांक भाग के लिए निम्नलिखित का उपयोग कर सकते हैं और दिनांक प्रारूपित कर सकते हैं:
DATENAME => एक वर्ण स्ट्रिंग देता है जो निर्दिष्ट तिथि के निर्दिष्ट दिनांक का प्रतिनिधित्व करता है
DATEADD => DATEPART()
फ़ंक्शन का उपयोग दिनांक / समय के किसी एक भाग को वापस करने के लिए किया जाता है, जैसे कि वर्ष, महीना, दिन, घंटा, मिनट, आदि।
DATEPART => एक पूर्णांक देता है जो निर्दिष्ट तिथि के निर्दिष्ट दिनांक का प्रतिनिधित्व करता है।
CONVERT()
=> CONVERT()
फ़ंक्शन एक सामान्य फ़ंक्शन है जो एक डेटा प्रकार की अभिव्यक्ति को दूसरे में परिवर्तित करता है।
CONVERT()
समारोह विभिन्न स्वरूपों में दिनांक / समय डेटा प्रदर्शित करने के लिए इस्तेमाल किया जा सकता है।