SQL सर्वर डेटटाइम डेटाटाइप से केवल दिनांक को वापस कैसे करें




sql-server tsql (20)

SELECT GETDATE()

रिटर्न: 2008-09-22 15:24:13.790

मैं उस अंश भाग को समय के बिना चाहता हूं: 2008-09-22 00:00:00.000

मैं इसे कैसे प्राप्त कर सकता हूं?


यदि आप SQL Server 2012 या उपरोक्त संस्करणों का उपयोग कर रहे हैं,

Format() फ़ंक्शन का उपयोग करें।

एसक्यूएल सर्वर के लिए पहले से ही कई उत्तर और स्वरूपण प्रकार हैं। लेकिन अधिकांश विधियां कुछ हद तक संदिग्ध हैं और विशिष्ट तिथि प्रारूप के संबंध में प्रारूप प्रकार या कार्यों के लिए संख्याओं को याद रखना आपके लिए मुश्किल होगा। यही कारण है कि SQL सर्वर के अगले संस्करणों में बेहतर विकल्प है।

FORMAT ( value, format [, culture ] )

संस्कृति विकल्प बहुत उपयोगी है, क्योंकि आप अपने दर्शकों के अनुसार तिथि निर्दिष्ट कर सकते हैं।

आपको डी (छोटे पैटर्न के लिए) और डी (लंबे पैटर्न के लिए) याद रखना होगा।

1. "डी" - लघु तिथि पैटर्न।

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)

2. "डी" - लंबी तारीख पैटर्न।

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日

यदि आप अधिक प्रारूप चाहते हैं, तो आप यहां जा सकते हैं:

  1. मानक तिथि और समय प्रारूप स्ट्रिंग्स
  2. कस्टम तिथि और समय प्रारूप स्ट्रिंग्स

DATEADD और DATEDIFF वर्कर को कनवर्ट करने से बेहतर हैं। दोनों प्रश्नों में एक ही निष्पादन योजना है, लेकिन निष्पादन योजनाएं मुख्य रूप से डेटा एक्सेस रणनीतियों के बारे में हैं और हमेशा सभी टुकड़ों को करने के लिए किए गए CPU समय में शामिल निहित लागत प्रकट नहीं करती हैं। यदि दोनों क्वेरी लाखों पंक्तियों वाली तालिका के विरुद्ध चलती हैं, तो डेटडिफ़ का उपयोग करने वाला CPU समय कनवर्ट CPU समय के 1/3 के करीब हो सकता है!

प्रश्नों के लिए निष्पादन योजनाओं को देखने के लिए:

set showplan_text on
GO 

DATEADD और DATEDIFF दोनों एक CONVERT_IMPLICIT निष्पादित करेंगे।

हालांकि कन्वर्ट समाधान कुछ के लिए पढ़ने के लिए आसान और आसान है, यह धीमा है। डेटाटाइम पर वापस जाने की कोई आवश्यकता नहीं है (यह सर्वर द्वारा पूरी तरह से किया जाता है)। तिथि के लिए डेटडिफ विधि में भी कोई वास्तविक आवश्यकता नहीं है बाद में पूर्णांक परिणाम को पूर्ण रूप से डेटाटाइम में परिवर्तित कर दिया जाएगा।

डेट्सटेबल से कन्वर्ट (वर्कर, माईडेट, 101) चुनें

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

DATEDD चुनें (डीडी, 0, DATEDIFF (डीडी, 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 के रूप में फ़्लोर () का उपयोग करने के लिए डेटडिफ़ के करीब प्रदर्शन किया गया है, लेकिन डेटाटाइम डेटा प्रकार को फ़्लोट करने के लिए कास्ट करने की सिफारिश नहीं की जाती है और पीछे हमेशा मूल मान नहीं मिलता है।

लोगों को याद रखें: किसी पर विश्वास न करें। प्रदर्शन आंकड़ों को देखें, और इसे स्वयं जांचें!

सावधान रहें जब आप अपने परिणामों का परीक्षण कर रहे हों। क्लाइंट को कई पंक्तियों का चयन करना प्रदर्शन अंतर को छिपाएगा क्योंकि गणनाओं को करने के लिए नेटवर्क पर पंक्तियों को भेजने में अधिक समय लगता है। तो सुनिश्चित करें कि सभी पंक्तियों के लिए काम सर्वर द्वारा किया जाता है लेकिन क्लाइंट को कोई पंक्ति नहीं भेजा जाता है।

कैश ऑप्टिमाइज़ेशन प्रश्नों को प्रभावित करते समय कुछ लोगों के लिए भ्रम प्रतीत होता है। एक ही बैच में या अलग बैचों में दो प्रश्नों को चलाने से कैशिंग पर कोई प्रभाव नहीं पड़ता है। तो आप या तो कैश को मैन्युअल रूप से समाप्त कर सकते हैं या क्वेरी को कई बार आगे चला सकते हैं। क्वेरी # 2 के लिए कोई भी अनुकूलन किसी भी बाद के प्रश्नों को प्रभावित करेगा, इसलिए यदि आप चाहें तो निष्पादन # 1 को फेंक दें।

यहां पूर्ण टेस्ट स्क्रिप्ट और प्रदर्शन परिणाम हैं जो साबित करते हैं कि डेटडिफ वर्चर में कनवर्ट करने से काफी तेज़ है।


आप DATE_FORMAT (your_datetiem_column, '% d-% m-% Y') का उपयोग क्यों नहीं करते?

EX: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

आप '%d-%m-%Y' भाग को फिर से व्यवस्थित करके एम, डी और वर्ष के अनुक्रम को बदल सकते हैं


आप केवल तारीख को वापस करने के लिए CONVERT फ़ंक्शन का उपयोग कर सकते हैं। नीचे दिए गए लिंक देखें:

SQL सर्वर 2000 में दिनांक और समय मैनिपुलेशन

कास्ट और कन्वर्ट

कन्वर्ट फ़ंक्शन का उपयोग करने के लिए वाक्यविन्यास है:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 

एसक्यूएल सर्वर 2012 से शुरू, आप यह कर सकते हैं:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')


एसक्यूएलसेवर 2008 में अब 'डेट' डेटा प्रकार है जिसमें कोई समय घटक नहीं है। SQLServer 2008 और उससे आगे का कोई भी निम्न कार्य कर सकता है:

SELECT CONVERT(date, GETDATE())

तारीख:

SELECT CONVERT(date, GETDATE())
SELECT CAST(GETDATE() as date)

पहर:

SELECT CONVERT(time , GETDATE() , 114)
SELECT CAST(GETDATE() as time)

परिणाम प्राप्त करने के लिए, मैं निम्नलिखित कमांड का उपयोग करता हूं।

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

मैं Holpe यह उपयोगी है।


मुझे लगता है कि यह आपके मामले में काम करेगा:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

मैं निम्नलिखित का पक्ष लेता हूं जिसका उल्लेख नहीं किया गया था:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

यह स्थानीय के बारे में भी परवाह नहीं करता है या डबल कन्वर्ट करता है - हालांकि प्रत्येक 'डेटपार्ट' शायद गणित करता है। तो यह डेटीफ विधि से थोड़ा धीमा हो सकता है, लेकिन मेरे लिए यह और अधिक स्पष्ट है। विशेष रूप से जब मैं केवल वर्ष और महीने (समूह को 1 सेट) तक समूह करना चाहता हूं।


यदि आप CONVERT का उपयोग करना चाहते हैं और मूल प्रश्न में उसी आउटपुट को प्राप्त करना चाहते हैं, यानी yyyy-mm-dd है तो CONVERT(varchar(10),[SourceDate as dateTime],121) पिछले कोड के समान कोड के समान कोड , लेकिन yyyy-mm-dd में डैश के साथ कनवर्ट करने के लिए कोड 121 है।

यदि मैं एक दूसरे के लिए अपने साबुन बॉक्स पर जा सकता हूं, तो इस प्रकार का स्वरूपण डेटा स्तर में नहीं है , और यही कारण है कि SQL सर्वर 2008 तक मूर्खतापूर्ण हाई-ओवरहेड 'चाल' के बिना संभव नहीं था जब वास्तविक दिनांक डेटा डेटा प्रकार की शुरुआत की। डेटा स्तर में ऐसे रूपांतरण करना आपके डीबीएमएस पर ओवरहेड का एक बड़ा अपशिष्ट है, लेकिन सबसे महत्वपूर्ण बात यह है कि दूसरा ऐसा कुछ करता है, आपने मूल रूप से अवांछित डेटा अनाथ डेटा बनाया है जो मुझे लगता है कि आप एक प्रोग्राम पर वापस आ जाएंगे। आप इसे किसी अन्य 3 एनएफ + कॉलम में वापस नहीं डाल सकते हैं या इसे बिना किसी बदलाव के टाइप किए गए किसी भी चीज़ से तुलना कर सकते हैं, इसलिए आपने जो कुछ किया है, वह विफलता के बिंदु और रिलेशनल संदर्भ हटा दिया गया है।

आपको हमेशा आगे बढ़ना चाहिए और अपनी तिथि टाइम डेटा प्रकार को कॉलिंग प्रोग्राम में और प्रस्तुति स्तर में वापस करना चाहिए , जो भी समायोजन आवश्यक हैं। जैसे ही आप उन्हें कॉलर पर लौटने से पहले चीजों को परिवर्तित करते हैं, आप एप्लिकेशन से संदर्भित अखंडता की सभी आशाओं को हटा रहे हैं। यह एक अद्यतन या डिलीट ऑपरेशन को फिर से रोक देगा, जब तक कि आप कुछ प्रकार के मैन्युअल रिवर्सन नहीं करते हैं, जो कि आवश्यकता होने पर मानव / कोड / gremlin त्रुटि में फिर से अपना डेटा उजागर कर रहा है।


यदि आप परिणामों को कॉलम या चर में निर्दिष्ट कर रहे हैं, तो इसे DATE का प्रकार दें, और रूपांतरण निहित है।

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03

यह सभी उत्तरों में गायब था, शायद सबसे कुशल नहीं हो सकता है लेकिन लिखना और समझना बहुत आसान है, कोई शैली की आवश्यकता नहीं है, कोई जटिल तारीख कार्य नहीं है।

SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE()))))

यहां तक ​​कि प्राचीन एमएसएसक्यूएल सर्वर 7.0 का उपयोग करके, यहां कोड (इस link की सौजन्य) ने मुझे उस दिनांक प्रारूप को प्राप्त करने की अनुमति दी जो मैं उस समय की तलाश में था:

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

तिथि (दिनांक और समय फ़ील्ड) और DATE_FORMAT (दिनांक और समय, '% वाई-% एम-% डी') दोनों तारीख और समय से केवल तारीख लौटाते हैं


तिथि प्रारूप में वापसी के लिए

सीएएसटी (ऑर्डरडेट एएस डेट)

उपरोक्त कोड एसक्यूएल सर्वर 2010 में काम करेगा

यह 12/12/2013 की तरह वापस आ जाएगा

SQL सर्वर 2012 के लिए नीचे दिए गए कोड का उपयोग करें

CONVERT(VARCHAR(10), OrderDate , 111)

DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'    
SELECT CONVERT(DATE, @yourdate)

SELECT * FROM tablename WHERE CAST ([my_date_time_var] AS DATE)= '8/5/2015'

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011

SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))




datetime