इस लेख में, हम SQL सर्वर के भीतर विभिन्न SQL CONVERT दिनांक स्वरूपों का उपयोग करके एक्सप्लोर करेंगे।
विभिन्न देशों के बीच तिथि की व्याख्या भिन्न होती है। मान लें कि आपके पास एक वैश्विक SQL सर्वर डेटाबेस है जिसमें एक तालिका है जिसमें एक विशिष्ट दिनांक प्रारूप है। उदाहरण के लिए, इसमें दिनांक कॉलम है जिसका मान 01/05/2020 है।
आप इसकी व्याख्या कैसे करते हैं? आइए विभिन्न देशों में निम्नलिखित व्याख्याओं को देखें।
- यूएसए:5 जनवरी, 2020 (मानक प्रारूप - मिमी/दिन/वर्ष)
- यूरोप:1 मई 2020 (मानक प्रारूप - dd/mm/yyyy)
इसके अतिरिक्त, अन्य देश भिन्न दिनांक स्वरूपों का अनुसरण करते हैं:
- तुर्की:dd.mm.yyyy
- भारत:dd-mm-yyyy
- बुल्गारिया:yyyy-m-d
- हंगरी:yyyy.mm.dd.
आप देश के अनुसार दिनांक प्रारूपों के बारे में अधिक जानकारी के लिए विकिपीडिया देख सकते हैं।
इसके अलावा, कभी-कभी हम तारीखों के साथ टाइमस्टैम्प भी शामिल करना चाहते हैं। इसके कुछ उदाहरण हैं:
- 01/05/2020 सुबह 10:00 बजे
- 0/05/2020 14:00
- 0/05/2020 दोपहर 02:00 बजे
- 01/05/2020 02:00:55 पूर्वाह्न
SQL सर्वर तालिका में तिथियों को विभिन्न स्वरूपों में संग्रहीत करना संभव नहीं है, इसलिए हमें दिनांक स्वरूपों को परिवर्तित करने का एक तरीका चाहिए। आइए विभिन्न SQL CONVERT दिनांक स्वरूप विधियों का अन्वेषण करें।
SQL कन्वर्ट दिनांक फ़ंक्शन
आमतौर पर, डेटाबेस पेशेवर एक निर्दिष्ट और सुसंगत प्रारूप में दिनांक प्राप्त करने के लिए SQL CONVERT दिनांक फ़ंक्शन का उपयोग करते हैं। यह विशिष्ट आउटपुट तिथियों के लिए स्टाइल कोड लागू करता है।
CONVERT() फ़ंक्शन का सिंटैक्स:
CONVERT(डेटाटाइप, डेटाटाइम [,स्टाइल])
नीचे दी गई SQL क्वेरी में, हम CONVERT () फ़ंक्शन का उपयोग करके डेटाटाइम को दो स्वरूपों में परिवर्तित करते हैं।
- मिमी/दिन/वर्ष प्रारूप:शैली कोड 1
- मिमी/दिन/वर्ष प्रारूप:शैली कोड 101
DECLARE @Inputdate datetime = '2019-12-31 14:43:35.863'; Select CONVERT(varchar,@Inputdate,1) as [mm/dd/yy], CONVERT(varchar,@Inputdate,101) as [mm/dd/yyyy]
इसी तरह, हम अलग-अलग स्टाइल कोड निर्दिष्ट कर सकते हैं ताकि आप तारीखों को अपने आवश्यक प्रारूप में बदल सकें।
SELECT '0' AS [StyleCode], 'Default format' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 0) AS [OutputFormat] UNION ALL SELECT '1' AS [StyleCode], 'USA - mm/dd/yy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 1) AS [OutputFormat] UNION ALL SELECT '2' AS [StyleCode], 'ANSI - dd.mm.yy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 2) AS [OutputFormat] UNION ALL SELECT '3' AS [StyleCode], 'British and French - dd/mm/yy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 3) AS [OutputFormat] UNION ALL SELECT '4' AS [StyleCode], 'German - dd.mm.yy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 4) AS [OutputFormat] UNION ALL SELECT '5' AS [StyleCode], 'Italian - dd-mm-yy ' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 5) AS [OutputFormat] UNION ALL SELECT '6' AS [StyleCode], 'Shortened month name -dd mon yy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 6) AS [OutputFormat] UNION ALL SELECT '7' AS [StyleCode], 'Shortened month name - mon dd, yy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 7) AS [OutputFormat] UNION ALL SELECT '8' AS [StyleCode], '24 hour time -hh:mm:ss' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 8) AS [OutputFormat] UNION ALL SELECT '9' AS [StyleCode], 'Default + milliseconds - mon dd yyyy hh:mm:ss:mmmAM (or PM)' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 9) AS [OutputFormat] UNION ALL SELECT '10' AS [StyleCode], 'USA - mm-dd-yy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 10) AS [OutputFormat] UNION ALL SELECT '11' AS [StyleCode], 'Japan -yy/mm/dd' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 11) AS [OutputFormat] UNION ALL SELECT '12' AS [StyleCode], 'ISO format -yymmdd' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 12) AS [OutputFormat] UNION ALL SELECT '13' AS [StyleCode], 'Europe default + milliseconds -dd mon yyyy hh:mm:ss:mmm' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 13) AS [OutputFormat] UNION ALL SELECT '14' AS [StyleCode], ' 24 hour time with milliseconds -hh:mm:ss:mmm(24h)' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 14) AS [OutputFormat] UNION ALL SELECT '20' AS [StyleCode], 'ODBC canonical -yyyy-mm-dd hh:mm:ss(24h)' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 20) AS [OutputFormat] UNION ALL SELECT '21' AS [StyleCode], 'ODBC canonical (with milliseconds) -yyyy-mm-dd hh:mm:ss.mmm' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 21) AS [OutputFormat] UNION ALL SELECT '22' AS [StyleCode], 'mm/dd/yy hh:mm:ss AM (or PM)' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 22) AS [OutputFormat] UNION ALL SELECT '23' AS [StyleCode], 'ISO 8601 - yyyy-mm-dd' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 23) AS [OutputFormat] UNION ALL SELECT '100' AS [StyleCode], 'mon dd yyyy hh:mmAM' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 100) AS [OutputFormat] UNION ALL SELECT '101' AS [StyleCode], 'USA -mm/dd/yyyy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 101) AS [OutputFormat] UNION ALL SELECT '102' AS [StyleCode], 'ANSI -yyyy.mm.dd' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 102) AS [OutputFormat] UNION ALL SELECT '103' AS [StyleCode], 'British/French -dd/mm/yyyy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 103) AS [OutputFormat] UNION ALL SELECT '104' AS [StyleCode], 'German - dd.mm.yyyy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 104) AS [OutputFormat] UNION ALL SELECT '105' AS [StyleCode], 'Italian -dd-mm-yyyy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 105) AS [OutputFormat] UNION ALL SELECT '106' AS [StyleCode], 'Shortened month name -dd mon yyyy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 106) AS [OutputFormat] UNION ALL SELECT '107' AS [StyleCode], 'Shortened month name -mon dd, yyyy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 107) AS [OutputFormat] UNION ALL SELECT '108' AS [StyleCode], '24 hour time -hh:mm:ss' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 108) AS [OutputFormat] UNION ALL SELECT '109' AS [StyleCode], 'Default + milliseconds -mon dd yyyy hh:mm:ss:mmmAM (or PM) ' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 109) AS [OutputFormat] UNION ALL SELECT '110' AS [StyleCode], 'USA -mm-dd-yyyy' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 110) AS [OutputFormat] UNION ALL SELECT '111' AS [StyleCode], 'JAPAN -yyyy/mm/dd' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 111) AS [OutputFormat] UNION ALL SELECT '112' AS [StyleCode], 'ISO -yyyymmdd' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 112) AS [OutputFormat] UNION ALL SELECT '113' AS [StyleCode], 'Europe default + milliseconds -dd mon yyyy hh:mm:ss:mmm' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 113) AS [OutputFormat] UNION ALL SELECT '114' AS [StyleCode], ' 24 hour time with milliseconds -hh:mm:ss:mmm(24h)' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 114) AS [OutputFormat] UNION ALL SELECT '120' AS [StyleCode], 'ODBC canonical- yyyy-mm-dd hh:mm:ss(24h)' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 120) AS [OutputFormat] UNION ALL SELECT '121' AS [StyleCode], 'ODBC canonical (with milliseconds) -yyyy-mm-dd hh:mm:ss.mmm' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 121) AS [OutputFormat] UNION ALL SELECT '126' AS [StyleCode], 'ISO8601 -yyyy-mm-ddThh:mm:ss.mmm' AS [Standard and Format], CONVERT(VARCHAR(50), Getdate(), 126) AS [OutputFormat] UNION ALL SELECT '127' AS [StyleCode], 'ISO8601 with time zone Z-yyyy-mm-ddThh:mm:ss.mmmZ' AS [Standard and Format], CONVERT(VARCHAR(100), Getdate(), 127) AS [OutputFormat] UNION ALL SELECT '131' AS [StyleCode], 'Arabic Hijri date - Islamic calendar' AS [Standard and Format], CONVERT(VARCHAR(100), Getdate(), 131) AS [OutputFormat]
नीचे दिए गए स्क्रीनशॉट में, आप स्टाइल कोड, उनके मानक, प्रारूप और आउटपुट तिथियां देख सकते हैं।
FORMAT() फ़ंक्शन का उपयोग करके दिनांक परिवर्तित करना
उपरोक्त CONVERT () फ़ंक्शन में, हमें एक विशिष्ट प्रारूप आउटपुट के लिए स्टाइल कोड निर्दिष्ट करने की आवश्यकता होती है। आमतौर पर, हम नहीं चाहते कि इन कोड्स को याद रखना पड़े; इसलिए, Microsoft ने SQL Server 2012 में FORMAT() फ़ंक्शन पेश किया।
सिंटैक्स नीचे दिखाया गया है।
प्रारूप (मान, प्रारूप [, संस्कृति])
मूल्य :इसे समर्थित प्रारूप में एक मान की आवश्यकता है। विस्तृत सूची के लिए आप Microsoft दस्तावेज़ देख सकते हैं।
प्रारूप :प्रारूप में, हम इनपुट दिनांक डेटा को गुप्त करने के लिए प्रारूप कोड या पैटर्न निर्दिष्ट कर सकते हैं। नीचे दी गई स्क्रिप्ट प्रारूप कोड, पैटर्न और आउटपुट स्वरूप दिखाती है।
DECLARE @InputDate DATETIME = '2020-12-08 15:58:17.643' SELECT 'd' AS [FormatCode], 'Short Date Pattern' AS 'Pattern', Format(@InputDate, 'd') AS 'Output' UNION ALL SELECT 'D' AS [FormatCode], 'Long Date Pattern' AS 'Pattern', Format(@InputDate, 'D') AS 'Output' UNION ALL SELECT 'f' AS [FormatCode], 'Full Date/Time pattern (Short Time)' AS 'Pattern', Format(@InputDate, 'f') AS 'Output' UNION ALL SELECT 'F' AS [FormatCode], 'Full Date/Time pattern (Long Time)' AS 'Pattern', Format(@InputDate, 'F') UNION ALL SELECT 'g' AS [FormatCode], 'General Date/Time pattern (Short Time)' AS 'Pattern', Format(@InputDate, 'g') UNION ALL SELECT 'G' AS [FormatCode], 'General Date/Time pattern (Long Time)' AS 'Pattern', Format(@InputDate, 'G') AS 'Output' UNION ALL SELECT 'm' AS [FormatCode], 'Month/Day pattern' AS 'Pattern', Format(@InputDate, 'm') AS 'Output' UNION ALL SELECT 'O' AS [FormatCode], 'Round trip Date/Time pattern' AS 'Pattern', Format(@InputDate, 'O') AS 'Output' UNION ALL SELECT 'R' AS [FormatCode], 'RFC1123 pattern' AS 'Pattern', Format(@InputDate, 'R') AS 'Output' UNION ALL SELECT 's' AS [FormatCode], 'Sortable Date/Time pattern' AS 'Pattern', Format(@InputDate, 's') AS 'Output' UNION ALL SELECT 't' AS [FormatCode], 'Short Time pattern' AS 'Pattern', Format(@InputDate, 't') AS 'Output' UNION ALL SELECT 'T' AS [FormatCode], 'Long Time Pattern' AS 'Pattern', Format(@InputDate, 'T') AS 'Output' UNION ALL SELECT 'u' AS [FormatCode], 'Universal sortable Date/Time pattern' AS 'Pattern', Format(@InputDate, 'u') AS 'Output' UNION ALL SELECT 'U' AS [FormatCode], 'Universal Full Date/Time pattern' AS 'Pattern', Format(@InputDate, 'U') AS 'Output' UNION ALL SELECT 'Y' AS [FormatCode], 'Year Month pattern' AS 'Pattern', Format(@InputDate, 'Y') AS 'Output'
संस्कृति :यह एक वैकल्पिक तर्क है और संस्कृति को परिभाषित करता है। यदि हम कोई संस्कृति निर्दिष्ट नहीं करते हैं, तो SQL सर्वर वर्तमान सत्र की भाषा का उपयोग करता है।
नीचे दी गई क्वेरी में, हम एक तिथि प्रारूप को एक निर्दिष्ट संस्कृति में बदल देंगे। हमें संस्कृति कोड निर्दिष्ट करने की आवश्यकता है। उदाहरण के लिए, यू.एस. का कल्चर कोड एन-यूएस है और हाई-इन भारत के लिए है।
स्क्रिप्ट d . का उपयोग करती हैं शॉर्ट डेट पैटर्न के लिए फॉर्मेट कोड।
DECLARE @d DATETIME ='2020-12-08 16:36:17.760'; SELECT FORMAT (@d, 'd', 'en-US') AS 'US English', FORMAT (@d, 'd', 'no') AS 'Norwegian Result', FORMAT(@d, 'd', 'hi-IN') AS 'India', FORMAT(@d, 'd', 'ru-RU') AS 'Russian', FORMAT(@d, 'd', 'gl-ES') AS 'Galician (Spain)', FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English', FORMAT (@d, 'd', 'zu') AS 'Zulu', FORMAT ( @d, 'd', 'de-de' ) AS 'German', FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC)';
आपको एक निर्दिष्ट संस्कृति में दिनांक प्रारूप मिलता है, जैसा कि नीचे दिखाया गया है।
यदि आप दिनांक आउटपुट को पूर्ण दिनांक/समय (लंबे समय) पैटर्न में चाहते हैं, तो प्रारूप कोड F निर्दिष्ट करें, और यह आपके दिनांक स्वरूप को शीघ्रता से बदल देता है।
दिनांक प्रारूप में, आप कस्टम प्रारूप भी निर्दिष्ट कर सकते हैं और यह आपकी आवश्यकताओं के अनुसार इनपुट दिनांक स्ट्रिंग को परिवर्तित करता है।
कस्टम स्ट्रिंग्स को निर्दिष्ट करने के लिए, हम निम्नलिखित संक्षिप्त रूपों का उपयोग कर सकते हैं।
- dd:महीने का दिन (01 से 31)
- dddd:दिन की वर्तनी
- MM:माह संख्या (01 से 12)
- MMMM:महीने की वर्तनी
- वर्ष:वर्ष दो अंकों में
- वर्ष:चार अंकों वाला वर्ष
- hh:यह समय 01 से 12 बजे तक है
- HH:यह 24 घंटे देता है। प्रारूप घंटा 00 से 23
- मिमी:मिनट 00 से 59
- ss:00 से 59 तक दूसरा
- tt:AM या PM
नीचे दी गई स्क्रिप्ट में, हमने उपरोक्त संक्षिप्त रूपों या कोड का उपयोग करके इनपुट दिनांक स्वरूपों को कई स्वरूपों में परिवर्तित किया है।
DECLARE @d DATETIME ='2020-12-08 16:36:17.760'; SELECT FORMAT (@d,'dd/MM/yyyy ') as [Date Format 1] , FORMAT (@d, 'dd/MM/yyyy, hh:mm:ss ') as [Date Format 2] , FORMAT(@d,'yyyy-MM-dd HH:mm:ss')as [Date Format 3] , FORMAT(@d,'Dd MMM yyyy HH:mm:ss')as [Date Format 4] , FORMAT(@d,'MMM d yyyy h:mm:ss')as [Date Format 5] , FORMAT (@d, 'dddd, MMMM, yyyy')as [Date Format 6] , FORMAT (@d, 'MMM dd yyyy') as [Date Format 7] , FORMAT (@d, 'MM.dd.yy') as [Date Format 8] , FORMAT (@d, 'MM-dd-yy') as [Date Format 9] , FORMAT (@d, 'hh:mm:ss tt')as [Date Format 10] , FORMAT (@d, 'd-M-yy')as [Date Format 11] , FORMAT(@d,'MMMM dd,yyyy')as [Date Format 12]
SQL सर्वर 2016 या बाद में AT TIME ZONE का उपयोग करना
विभिन्न देश अलग-अलग समय क्षेत्रों का पालन करते हैं। आमतौर पर, ये समय क्षेत्र कोऑर्डिनेटेड यूनिवर्सल टाइम (UTC) समय से ऑफसेट का पालन करते हैं। समय क्षेत्र के कुछ उदाहरण हैं:
- ऑस्ट्रेलियाई सेंट्रल डेलाइट टाइम:यूटीसी +10:30
- भारत मानक समय:यूटीसी +5:30
- माउंटेन डेलाइट टाइम:UTC-6
- सिंगापुर समय:UTC+8
- केंद्रीय दिन के उजाले का समय:UTC-5
समय क्षेत्रों की विस्तृत सूची के लिए आप इस लेख को देख सकते हैं।
कई देश दिन के उजाले की बचत का पालन करते हैं और समय क्षेत्र के आधार पर घड़ी को 1 घंटा (या 30-45 मिनट) समायोजित किया जाता है। उदाहरण के लिए, सेंट्रल डेलाइट टाइम ने निम्नलिखित शेड्यूल का पालन किया:
- मानक समय शुरू हुआ:1 नवंबर, 2020 02:00 स्थानीय समय। घड़ियाँ एक घंटे पीछे कर दी गईं।
- मानक समय 14 मार्च, 2021 को स्थानीय समयानुसार 02:00 बजे समाप्त होगा। घड़ियाँ एक घंटा आगे बढ़ेंगी।
SQL सर्वर इन समय क्षेत्रों और डेलाइट सेविंग से अवगत नहीं है। आमतौर पर, कोई संगठन UTC क्षेत्रों का अनुसरण करता है क्योंकि इसमें किसी परिवर्तन की आवश्यकता नहीं होती है।
हम SQL सर्वर में समय क्षेत्र कैसे परिवर्तित कर सकते हैं?
आप SQL सर्वर 2016 से शुरू होने वाले AT TIME ZONE का उपयोग कर सकते हैं और समय क्षेत्र को परिवर्तित कर सकते हैं। नीचे दिए गए प्रश्न में, यह केंद्रीय मानक समय, भारत मानक समय और समोआ मानक समय के लिए दिनांक दिखाता है।
Declare @DateinUTC datetime2='2020-11-01 02:00:00' select @DateinUTC AT TIME ZONE 'UTC' AT TIME ZONE 'Central Standard Time' as 'Central Standard Time' , @DateinUTC AT TIME ZONE 'UTC' AT TIME ZONE 'India Standard Time' as 'India Standard Time', @DateinUTC AT TIME ZONE 'UTC' AT TIME ZONE 'Samoa Standard Time' as 'Samoa Standard Time', @DateinUTC AT TIME ZONE 'UTC' AT TIME ZONE 'Dateline Standard Time' as 'Dateline Standard Time'
समर्थित समय क्षेत्रों को जानने के लिए, आप क्वेरी कर सकते हैं sys.time_zone_info और यह समय क्षेत्र और ऑफ़सेट लौटाता है।
फिर आप उन समय क्षेत्रों को फ़िल्टर कर सकते हैं जो वर्तमान में दिन के उजाले की बचत का पालन कर रहे हैं।
Select * from sys.time_zone_info where is_currently_dst=1
अब, पूर्वी समय के लिए दिन के उजाले की बचत पर विचार करें।
- डेलाइट सेविंग टाइम शुरू हुआ - रविवार, 8 मार्च, 2020 दोपहर 2:00 बजे।
- डेलाइट सेविंग टाइम खत्म हो गया- रविवार, 1 नवंबर, 2020, सुबह 2:00 बजे।
अपने यूटीसी क्षेत्र को पूर्वी मानक समय में बदलें, और आप दिन के उजाले की बचत के प्रभाव को नोट कर सकते हैं।
DECLARE @PreDST datetime = '2020-03-08 06:59:00', @PostDST datetime = '2020-03-08 07:00:00'; SELECT @PreDST AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time' AS [EST time before DST], @PostDST AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time' AS [EST time before DST];
SQL CONVERT दिनांक स्वरूपों का उपयोग करने के लिए उपयोगी बिंदु
अपनी आवेदन आवश्यकताओं का मूल्यांकन करें और उपयुक्त डेटा प्रकार दिनांक, SmallDateTime, DateTime, DateTime2 और DateTimeOffset चुनें।
आप SQL CONVERT दिनांक और FORMAT फ़ंक्शंस का उपयोग करके दिनांक स्वरूप को रूपांतरित कर सकते हैं; हालांकि, उस प्रारूप का उपयोग करने की सलाह दी जाती है जो आपके कार्यभार को सबसे अधिक संतुष्ट करता है। यह आपको स्पष्ट दिनांक रूपांतरण का उपयोग करने से बचने में मदद करेगा।
आप SQL सर्वर में दिन के उजाले की बचत के लिए SQL से शुरू होने वाले AT TIME ZONE फ़ंक्शन का उपयोग कर सकते हैं