2009-12-17 22 views
38

संभव डुप्लिकेट करने के लिए:
Create a date with T-SQLएसक्यूएल सर्वर: कन्वर्ट ((int) साल, (int) महीने, (int) दिन) Datetime

मुझे लगता है कि प्रत्येक संग्रहीत करता है एक डेटा तालिका है वर्ष, माह और ints के रूप में दिन मूल्य:

year | month | day 
2009 | 1 | 1 
2008 | 12 | 2 
2007 | 5 | 5 

मैं क्योंकि मैं आपरेशन के बीच एक datetime में इसका इस्तेमाल करने की जरूरत है, यह datetime मूल्य में बदलने की जरूरत है। मैं ये कैसे करूं?

+0

यह कई बार कहा गया है। http://stackoverflow.com/questions/266924/create-a-date-with-t-sql – womp

उत्तर

64

के लिए, आप आईएसओ 8601 YYYYMMDD प्रारूप का उपयोग करना चाहिए भाषा और स्थान सेटिंग्स के स्वतंत्र होने के लिए - यह किसी भी भाषा और प्रभाव में क्षेत्रीय सेटिंग के साथ किसी भी एसक्यूएल सर्वर सिस्टम पर काम करेगा:

SELECT 
    CAST(
     CAST(year AS VARCHAR(4)) + 
     RIGHT('0' + CAST(month AS VARCHAR(2)), 2) + 
     RIGHT('0' + CAST(day AS VARCHAR(2)), 2) 
    AS DATETIME) 
+0

धन्यवाद, मैंने इसे भी इस तरह से किया। – balint

+1

YYYYMMDD जादू की तरह काम करता है! – LaBracca

+0

हालांकि Firebird 2.5 के साथ काम नहीं करता, केवल 'YYYY-MM-DD' करता – Fr0sT

2
SELECT CAST(CAST(year AS varchar) + '/' + CAST(month AS varchar) + '/' + CAST(day as varchar) AS datetime) AS MyDateTime 
FROM table 
+4

एक बुरा विचार है कि देखें - यह अपने दिनांक स्वरूप के लिए स्थानीय सेटिंग्स पर निर्भर है। –

+1

@marc_s समझा, लेकिन आपकी तैनाती की जरूरतों के आधार पर, यह एक मूक बिंदु हो सकता है। –

+2

न। यदि यह एक बार विज्ञापन-प्रसार क्वेरी है, तो मैं आपका बिंदु देख सकता हूं। लेकिन एक संग्रहित प्रक्रिया में नहीं। marc_s एक अच्छा मुद्दा है! – TamusJRoyce

7

आप एक 'दशमलव' datetime में अपने मूल्यों परिवर्तित कर सकते हैं और एक वास्तविक datetime स्तंभ के लिए तो यह कन्वर्ट:

select cast(rtrim(year *10000+ month *100+ day) as datetime) as Date from DateTable 

here देखें साथ ही अधिक जानकारी के लिए।

+0

यह सबसे अच्छा जवाब –

36

शुद्ध datetime समाधान,, भाषा या DateFormat पर निर्भर नहीं करता किसी शर्त

SELECT 
    DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, 0))) 
FROM 
    dbo.Table 
+0

हालांकि –

+0

@AdriaanDavel एसक्यूएल सर्वर (प्रश्न टैग) है यह एसक्यूएल की आवश्यकता है आधार तिथि के रूप में 1900 के साथ कॉन्फ़िगर करने * हमेशा * आधार तिथि 01 जनवरी 1900 है नहीं था । https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql "डिफ़ॉल्ट मान" देखें। – gbn