टी-एसक्यूएल में स्ट्रिंग को डेटाइम कैसे कन्वर्ट करें


91

मुझे आश्चर्य है कि पहले से ही इस प्रश्न को यहां नहीं पा रहा हूं।

मेरे पास एक दिनांक समय संस्करण है और मैं इसे एक स्ट्रिंग में बदलना चाहता हूं ताकि मैं इसे दूसरे स्ट्रिंग में जोड़ सकूं। मैं इसे एक ऐसे प्रारूप में चाहता हूं जिसे आसानी से एक तारीख के समय में परिवर्तित किया जा सके।

मैं यह कैसे कर सकता हूँ?

(मुझे तारीख का हिस्सा और समय का हिस्सा चाहिए।)


@TonyHopkinson को मुझे बहुत सारी हिट फिल्में मिलीं, लेकिन वे सभी दूसरे तरीके से परिवर्तित करने के लिए लग रहे थे। या कुछ और अधिक जटिल चाहते हैं।
cja

3
टाइप करें Convert, हाइलाइट करने के लिए डबल-क्लिक करें, Shift + F1 दबाएं ... हमेशा रक्षा की पहली पंक्ति।
एरिक जे। मूल्य

जवाबों:


156

निम्न क्वेरी वर्तमान डेटाइम प्राप्त करेगी और स्ट्रिंग में परिवर्तित होगी। निम्नलिखित प्रारूप के साथ
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 

48
मैं अभी भी इस तथ्य पर
काबू

4
@ cja मैं पूरी तरह से आपके आश्चर्य को साझा करता हूं। मैं एक स्ट्रिंग प्रदान करना चाहता हूं, जैसे कि मैं चाहता हूं कि सटीक प्रारूप प्राप्त करने के लिए yyddss । शायद इसका कोई तकनीकी या ऐतिहासिक कारण है। लेकिन फिर भी - बहुत सर्प्राइज़िंग।
कोनराड विल्टर्स्टन

2
त्वरित सुधार के लिए धन्यवाद, लेकिन आपके जवाब में आप महीनों को मिनटों के रूप में कोड कर रहे हैं, yyyy-MM-dd hh: mm: ss NOT yyyy-mm-dd hh: mm: ss
टॉम मार्टिन

हालांकि यह पुराना है, मैं सिर्फ इस धागे में भाग गया। उपयोग करते समय DateTimeOffSet, varcharलंबाई को समायोजित करने के लिए सुनिश्चित करें कि आप अपना परिणाम कैसा दिखना चाहते हैं। मेरे लिए, मुझे SELECT convert(varchar(19), sysdatetimeoffset(), 120)
टाइमज़ोन

30

वहाँ करने के लिए विभिन्न तरीके हैं convertएक datetimeएक स्ट्रिंग के लिए। यहाँ एक तरीका है:

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

देख डेमो

यहाँ एक वेबसाइट है जिसमें सभी रूपांतरणों की एक सूची है:

SQL सर्वर में डेटाइम और फॉर्मेट को फॉर्मेट कैसे करें


7

convertMicrosoft SQL सर्वर में दिनांक को स्ट्रिंग में बदलने के लिए आप कथन का उपयोग कर सकते हैं । प्रयुक्त सिंटैक्स का एक उदाहरण होगा:

SELECT convert(varchar(20), getdate(), 120)

इसके बाद के संस्करण स्ट्रिंग में वर्तमान दिनांक और समय को लौटा देगा YYYY-MM-DD HH:MM:SS 24 घंटे की घड़ी ।

आप स्टेटमेंट के अंत में संख्या को कई में से एक में बदल सकते हैं जो लौटे स्ट्रिंग्स प्रारूप को बदल देगा। इन कोड की एक सूची CAST और CONVERT संदर्भ अनुभाग में MSDN पर पाई जा सकती है ।


7

मेरी आवश्यकता के आधार पर 3 अलग-अलग विधियां हैं और मैं किस संस्करण का उपयोग कर रहा हूं।

ये रहे तरीके ..

1) कन्वर्ट का उपयोग करना

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2) कास्ट (SQL सर्वर 2008 और उसके बाद) का उपयोग करना

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3) निश्चित-लंबाई वाले चरित्र डेटा प्रकार का उपयोग करना

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'

5

पिछले उत्तरों में CASTऔर CONVERTकार्यों के अलावा , यदि आप SQL सर्वर 2012 का उपयोग कर रहे हैं और ऊपर आप एक प्रकार पर आधारित स्ट्रिंग में कनवर्ट करने के लिए FORMAT फ़ंक्शन का उपयोग करते हैं DATETIME

वापस बदलने के लिए, विपरीत PARSEया TRYPARSEकार्यों का उपयोग करें ।

स्वरूपण शैलियाँ .NET पर आधारित होती हैं (ToString () विधि के स्ट्रिंग प्रारूपण विकल्पों के समान) और संस्कृति के जागरूक होने का लाभ मिलता है। जैसे।

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

परिणाम:

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000

क्या मुझे कुछ याद आ रहा है या FORMAT (<दिनांक var>, 'dd MMMM yyyy HH: mm: ss') या जो भी कस्टम तिथि प्रारूप आपको चाहिए, के साथ ओपी समस्या हल हो गई है?
ग्रिम

@ जब भी आप ऐसा कर सकते हैं। डॉक्स सेThe format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
g2server

मुझे लगता है कि आप वास्तव में यहां बहुत मेहनत कर रहे हैं। SQL सर्वर DATETIME2 के लिए अंतर्निहित स्ट्रिंग समकक्ष है। आप वास्तव में यहाँ क्या कर रहे हैं, अंतर्निहित रूपांतरण का उपयोग कर रहा है और फिर परिणामी स्ट्रिंग को प्रारूपित कर रहा है, डेटाटाइम नहीं।
जेमी मार्शल

@JamieMarshall कम या ज्यादा। MSDN से पता चलता है:Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
g2server


1
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101 - यूएस - एमएम / डीडी / वाईवाईवाई

108 - समय - एचएच: एमआई: एसएस

112 - दिनांक - YYYYMMDD

121 - ODBC - YYYY-MM-DD HH: MI: SS.FFF

20 - ODBC - YYYY-MM-DD HH: MI: SS


1

यह बहुत से लोगों द्वारा उत्तर दिया गया है, लेकिन मुझे लगता है कि सबसे सरल समाधान छोड़ दिया गया है।

SQL सर्वर (मेरा मानना ​​है कि इसका 2012+) DATETIME2 के लिए अंतर्निहित स्ट्रिंग समकक्ष है जैसा कि यहां दिखाया गया है

"Datetime2 के लिए समर्थित स्ट्रिंग शाब्दिक स्वरूपों" पर अनुभाग देखें

ओपी प्रश्न का उत्तर स्पष्ट रूप से देने के लिए:

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

उत्पादन:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

नोट: पहला वेरिएबल ( myVar) वास्तव में वैल्यू '2019-01-23 12:24:00.0000000'को भी होल्ड करता है । यह सिर्फ Jan 23 2019 12:24PMSQL सर्वर के लिए डिफ़ॉल्ट स्वरूपण सेट के कारण स्वरूपित हो जाता है जो आपके द्वारा उपयोग किए जाने पर कॉल किया जाता है PRINT। यहाँ से मत उलझो, वास्तविक स्ट्रिंग इन (myVer)='2019-01-23 12:24:00.0000000'


0

नीचे कोशिश करें:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)

1
अच्छा !! क्या हमें LEFT भी लिखना होगा?
गौरव

10 पहले चार्ट लेता है, इसलिए यदि आप तारीख चाहते हैं तो आपको इसकी आवश्यकता है।
ram4nd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.