TSQL डेटाइम क्षेत्र से YYYY-MM-DD प्रारूप में दिनांक कैसे प्राप्त करें?


259

मैं SQL सर्वर से YYYY-MM-DDप्रारूप में दिनांक कैसे प्राप्त करूं ? मुझे SQL Server 2000 और उसके साथ काम करने के लिए इसकी आवश्यकता है। SQL सर्वर में इसे निष्पादित करने का एक सरल तरीका है या परिणाम सेट को पुनः प्राप्त करने के बाद इसे प्रोग्राम रूप से परिवर्तित करना आसान होगा?

मैंने Microsoft तकनीक पर CAST और CONVERT पढ़ा है , लेकिन मैं जो प्रारूप चाहता हूं वह सूचीबद्ध नहीं है और दिनांक प्रारूप को बदलना कोई विकल्प नहीं है।


126 का बीओएल विवरण थोड़ा भ्रम है ("टी" के लिए स्पष्टीकरण कभी नहीं मिला)।
nojetlag

"टी" समय से तारीख को अलग करता है। विकिपीडिया पर ISO 8601 देखें
क्रुबो

जवाबों:


428
SELECT CONVERT(char(10), GetDate(),126)

घंटे के हिस्से के varchar चॉप्स के आकार को सीमित करना जो आप नहीं चाहते हैं।


3
नहीं, लेकिन कुछ ग्राहकों की निश्चित लंबाई के साथ समस्या है।
gbn

54
यह पोस्ट Google में YYYYMMDD में कनवर्ट करने के लिए आई है - ताकि एक है: CONVERT (चार (10), गेटडेट) (), 112)
नीलवैल्ट्स

1
यह मेरे लिए कारगर नहीं रहा, w / 112 के ऊपर दिए गए सुझाव ने 112 किया। धन्यवाद @ नीललव्टर
एलेक्सवैल

4
आउटपुट शैलियों के लिए पूर्णांक-कोड की सूची: msdn.microsoft.com/en-us/library/ms187928.aspx
बेन फ्रांसेन

कोड 126 YYYY-mm-dd प्रारूप में जन्मतिथि जैसे तारीखों के लिए अच्छा है: CONVERT (char (10), pat_dob, 126) pat_dob के रूप में
jjwdesign

118
SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008                  

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd

SELECT convert(varchar, getdate(), 112) -- yyyymmdd

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm

1
'mm / dd / yyyy' के बजाय 'm / d / yyyy' कैसे प्राप्त करें
user_az

यह अब तक का सबसे उपयोगी उत्तर है।
डैनियल

109

SQL सर्वर 2012 से शुरू होता है (मूल प्रश्न 2000 के लिए है):

SELECT FORMAT(GetDate(), 'yyyy-MM-dd')


यह डॉटनेट मानक प्रारूपों का उपयोग करके हाल के एसक्यूएल संस्करणों में तारीख / समय करने के लिए समझदार तरीका है। मिनट से अलग करने के लिए महीने के एमएम को कैपिटल में रखना याद रखें। सभी दिनांक समय प्रारूप
जिम बर्च

35

आप जिस फॉर्म में हैं, वह पुस्तकों में ऑनलाइन दस्तावेज़ में सूचीबद्ध है।

http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

उदाहरण के लिए, निम्नलिखित प्रयास करें:

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)

4
यदि आप डिफ़ॉल्ट लेते हैं, तो इस स्थिति में, आपको समय मान मिलता है - प्रारूप 120 के लिए संपूर्ण प्रारूप 'yyyy-mm-dd hh: mi: ss' है। लंबाई को स्पष्ट रूप से घोषित करके, यह आपके द्वारा निर्दिष्ट मूल प्रारूप में ट्रिम कर दिया गया है - 'yyyy-mm-dd'।
डेव

26

convertफॉर्मेट स्पेसिफायर 120 के साथ समारोह आप दे देंगे प्रारूप "yyyy-MM-yyyy HH: mm: ss" है, तो आप सिर्फ तारीख हिस्सा पाने के लिए 10 लंबाई सीमित करने के लिए है:

convert(varchar(10), theDate, 120)

हालाँकि, दिनांक स्वरूपण आमतौर पर डेटाबेस या व्यावसायिक परत के बजाय प्रस्तुति परत में करना बेहतर होता है। यदि आप डेटाबेस से फॉर्मेट की गई तारीख को वापस करते हैं, तो क्लाइंट कोड को उस तारीख को फिर से पार्स करना होगा, अगर उस पर कोई गणना करने की आवश्यकता है।

C # में उदाहरण:

theDate.ToString("yyyy-MM-dd")

1
क्यों होता है पतन? यदि आप यह नहीं समझाते हैं कि ऐसा क्या है जो आपको लगता है कि यह गलत है, तो इससे उत्तर में सुधार नहीं हो सकता है।
गुफ़ा

14

YYYYMMDD के लिए प्रयास करें

select convert(varchar,getDate(),112)

मैंने केवल SQLServer2008 पर परीक्षण किया है।


7

एक अन्य तरीका ...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 

1
यह 8/3/2012 में 1 अंकों की तिथियों का निर्माण करेगा यदि आप 2 अंकों का मिमी / dd चाहते हैं तो आपको तारीखों को छोड़ना होगा। उदाहरण के लिए RIGHT ('00 '+ CONVERT (varchar, DATEPART (yyyy, @datetime)), 2)
MindStalker

7

उन लोगों के लिए जो समय का हिस्सा चाहते हैं (मैंने किया), निम्नलिखित स्निपेट मदद कर सकता है

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                              --example -- 2008-10-02T10:52:47.513

6
replace(convert(varchar, getdate(), 111), '/','-')

"बिना कुछ काटे" के साथ चालबाजी भी करेगा।


मैं इस संस्करण को "वर्ष 9999" से बचने के लिए पसंद करता हूं जो कि कन्वर्ट (varchar (10) ...) संस्करण से जुड़ा है।
फ्रांसिस हुआंग

6

मामले में कोई इसे दूसरे तरीके से करना चाहता है और यह पाता है।

select convert(datetime, '12.09.2014', 104)

यह एक स्ट्रिंग को जर्मन तिथि प्रारूप में डेटाइम ऑब्जेक्ट में कनवर्ट करता है।

क्यों 104? यहां देखें: http://msdn.microsoft.com/en-us/library/ms187928.aspx


5

अपनी कास्ट और कन्वर्ट लिंक में, इस प्रकार शैली 126 का उपयोग करें:

CONVERT (varchar(10), DTvalue, 126)

इससे समय खराब होता है। आपकी आवश्यकता इसे yyyy-mm-dd में रखने का अर्थ है कि यह एक स्ट्रिंग डेटाटाइप और डेटाइम होना चाहिए।

सच कहूँ तो, मैं इसे क्लाइंट पर करता हूँ जब तक कि आपके पास अच्छे कारण न हों।


4

यदि आप इसे एक तारीख के बजाय varcharफिर से उपयोग करना चाहते हैं , तो इसे वापस बदलना न भूलें:

select convert(datetime,CONVERT(char(10), GetDate(),126))

क्या यह इसे सिस्टम डिफ़ॉल्ट प्रारूप में वापस नहीं बदलेगा?
इग्नास व्यास

3

मुझे यकीन नहीं है कि ऊपर दिए गए उत्तरों में सबसे सरल तरीके को अनदेखा / छोड़ क्यों दिया गया है:

SELECT FORMAT(GetDate(),'yyyy-MM-dd');--= 2020-01-02

SELECT FORMAT(GetDate(),'dd MMM yyyy HH:mm:ss');-- = 02 Jan 2020 08:08:08

मैं दूसरी पसंद करता हूं क्योंकि आप जो भी भाषा बोलते हैं, आप समझेंगे कि यह किस तारीख को है!

इसके अलावा SQL सर्वर हमेशा इसे 'समझता' है जब आप इसे अपने सहेजने की प्रक्रिया में भेजते हैं, जिसकी परवाह किए बिना कंप्यूटर में क्षेत्रीय प्रारूप सेट किए जाते हैं - मैं हमेशा पूरे वर्ष (yyyy), महीने का नाम (MMM) और 24 घंटे का प्रारूप (राजधानी HH) का उपयोग करता हूं मेरी प्रोग्रामिंग में घंटे के लिए।



2

आप भी उपयोग कर सकते हैं। यह नया डेटाटाइप का उपयोग करके है DATE। पिछले सभी संस्करणों में काम नहीं कर सकते हैं, लेकिन बाद के संस्करण में उपयोग करने के लिए बहुत सरल है।

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)


1
SELECT Code,Description FROM TABLE

-- This will Include only date part of 14th March 2010. Any date with date companents will not be considered.
WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))

-- This will Include the whole day of 14th March 2010
--WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))


1

किसी भी अजीब चीजों को करने के लिए अनावश्यक लगता है, अगर आप चाहते हैं कि आपकी तारीख स्लैश से अलग हो जाए। बस इसे एक बैकस्लैश के साथ बच। अन्यथा आप एक डॉट के साथ समाप्त हो जाएंगे।

SELECT FORMAT(GETDATE(),'yyyy\/MM');  

SQL सर्वर 2016 पर परीक्षण किया गया


0

कन्वर्ट / कास्ट कार्यों में से प्रत्येक के लिए एक CASE स्टेटमेंट का उपयोग करना हमेशा मेरे लिए काम करता है:

कृपया तालिका तालिका का नाम अपने टेबल के नाम के साथ बदलें, और उस तालिका में अपने डेटाटाइम क्षेत्र के नाम के साथ जारी करें:

SELECT  issueDate_dat, CONVERT(varchar, DATEPART(yyyy, issuedate_dat))  AS issueDateYYYY
, CASE WHEN (len(CONVERT(varchar, DATEPART(mm, issuedate_dat))) < 2) THEN '0' +CONVERT(varchar, DATEPART(mm, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(mm, issuedate_dat)) END AS  issueDateMM
, CASE WHEN (len(CONVERT(varchar, DATEPART(dd, issuedate_dat))) <2) THEN '0' +CONVERT(varchar, DATEPART(dd, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(dd, issuedate_dat)) END AS issueDateDD
FROM            tableXXXXY

आशा है कि यह मददगार था। chagbert।


0

यह समाधान मेरे लिए काम करता है, सरल और प्रभावी (126 के साथ भी)

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)

0

यदि आपके स्रोत की तारीख का प्रारूप गड़बड़ हो गया है, तो उसकी तर्ज पर कुछ प्रयास करें:

select
convert(nvarchar(50),year(a.messedupDate))+'-'+
(case when len(convert(nvarchar(50),month(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),month(a.messedupDate))+'-' 
    else convert(nvarchar(50),month(a.messedupDate)) end)+
(case when len(convert(nvarchar(50),day(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),day(a.messedupDate))+'-'
    else convert(nvarchar(50),day(a.messedupDate)) end) 
from messytable a

0
 IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;

उपरोक्त कोड मिमी / dd / yyyy के रूप में पैरामीटर को स्टोर प्रक्रिया प्रदान करने के लिए उपयोग किया जाता है
राज कुमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.