2011-09-02 13 views
41

ठीक है - मैं कुछ लोगों को कहा है और वहाँ यह करने के लिए एक आसान तरीका हो गया है ....संयोजन दिनांक और समय क्षेत्रों, एसक्यूएल सर्वर 2008

declare @Date date 
declare @Time time 
declare @datetime datetime 

select @Date = convert(Date,GetDate()) 
select @Time = convert(Time,GetDate()) 

select @Date, @Time, @Date + @Time (+ operator fails!) 

मैं वास्तव में है करने के लिए: 1) एक स्ट्रिंग में कनवर्ट करें, फिर डेटाटाइम फ़ील्ड में कनवर्ट करें? 2) DATEADD और DatePart घंटे पहले जोड़ने के लिए तो मिनट है, तो सेकंड का उपयोग ..... एसक्यूएल सर्वर 2012 में

+4

मुझे नहीं लगता कि यह कोई डुप्लिकेट सवाल है, इस नए के बारे में एक सवाल है SQL 2008 में दिनांक और समय प्रकार। अन्य प्रश्न में इन्हें शामिल नहीं किया गया है और यह सभी डेटटाइम प्रकारों के बारे में है। –

उत्तर

52
@Date + cast(@Time as datetime) 

और मैं SQL सर्वर 2014 मान लें कि आपके दोनों दिनांक और समय चर को कास्ट करने के लिए neeed दिनांक समय।

cast(@Date as datetime) + cast(@Time as datetime) 
+0

संदेश 402, स्तर 16, राज्य 1, रेखा 8 डेटा प्रकार दिनांक और डेटाटाइम ऐड ऑपरेटर में असंगत हैं। – Davos

+0

सहमत, लुकअप त्रुटि - SQL सर्वर डेटाबेस त्रुटि: डेटा प्रकार दिनांक और डेटाटाइम एड ऑपरेटर में असंगत हैं। @jdavies द्वारा बताए गए अनुसार आपको डेटाटाइम के रूप में दोनों को डालने की आवश्यकता है। – mprost

+0

@mprost SQL सर्वर 2008 में नहीं है लेकिन SQL Server 2012 में आप सही हैं। और संभवतः एसक्यूएल सर्वर 2014 में भी। मैंने जवाब अपडेट किया है। –

9

उन दोनों कास्टिंग DATETIME करने के लिए पहले का प्रयास करें:

SELECT CAST(@Date AS DATETIME) + CAST(@Time AS DATETIME) 
+0

पर एक नज़र डालें गैर नियतात्मक प्रपत्र: ALTER तालिका MyTable जोड़ें ( \t DATEADD \t ( \t \t दिन \t \t के रूप में MyDateTime2, DateDiff \t \t ( \t \t \t दिन \t \t \t परिवर्तित (तिथि, '1 9000101 ', 112) \t \t \t, mydate \t \t) \t \t परिवर्तित (datetime2 (7), mytime) \t) ) कायम –

3

यह काम करना चाहिए:

select @Date, @Time, CAST(@Date AS datetime) + CAST(@Time AS datetime) 
संबंधित मुद्दे