2013-07-18 12 views
6

में एसक्यूएल सर्वर में दिनांक और समय कम्बाइन मैं अपनी तालिका में From तारीख है, लेकिन मैं यह करने के लिए ठीक समय जोड़ने के लिएचयन करें क्वेरी

मैं इस

select cast(FromDate as date) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason 

की तरह कोशिश कर रहा हूँ चाहते हैं, लेकिन यह खड़ी कर रहा है एक त्रुटि:

Operand data type date is invalid for add operator.

+0

हाँ मैं एसक्यूएल सर्वर 2008 –

उत्तर

6

उपयोग DATEADD:

SELECT 
    DATEADD(HOUR, 18, CAST(CAST(FromDate AS DATE) AS DATETIME)) as StartDT 
FROM 
    WsWmpLeaveReason 

DATEADD बारे में अधिक जानकारी और इसके विकल्प के लिए freely available, comprehensive SQL Server Books Online documentation देखें

+1

का उपयोग कर रहा हूं "डेटपर्ट घंटे डेटा प्रकार दिनांक के लिए डेट फ़ंक्शन डेटड द्वारा समर्थित नहीं है।" (या, 'DATEADD' के लिए प्रलेखन से: "वापसी डेटा प्रकार स्ट्रिंग अक्षर के अलावा, दिनांक तर्क का डेटा प्रकार है") –

+0

यह यह त्रुटि दे रहा है: दिनांक प्रकार का दिनांक डेटा प्रकार के लिए दिनांक फ़ंक्शन डेटड द्वारा समर्थित नहीं है तारीख। –

+1

@Damien_The_Unbeliever: arrrrgh! बेशक - यदि यह 'DATE' है, तो यह घर की अनुमति नहीं देता ...... इसलिए आपको शून्य समय प्राप्त करने के लिए पहले 'DATE' पर डालना होगा, फिर वापस' DATETIME' 'ताकि आप घंटों को जोड़ सकें। .... इस पर ध्यान दिलाने के लिए धन्यवाद! –

1

मैं सिर्फ का प्रयोग करेंगे datetime और इसके अलावा:

select cast(cast(FromDate as date) as datetime) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason; 

तो FromDate पहले से ही एक समय घटक की कमी है, तो आप सिर्फ कर सकते हैं:

select cast(FromDate as datetime) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason; 

आप को datetime पर जोड़ सकते हैं, लेकिन date पर नहीं।

3

बस चीजों पर अलग राय के रूप में, मैं बाहर मेरी पसंदीदा DATEADD/DATEDIFF चाल एक बार फिर से पहिये होगी:

select DATEADD(day,DATEDIFF(day,'20010101',FromDate),'2001-01-01T18:00:00') 
from WsWmpLeaveReason 

यह 1 के बाद से कंप्यूटिंग दिनों की (अभिन्न) संख्या जनवरी 2001 FromDate करने से काम करता है , और उसके बाद 1 जनवरी 2001 को उसी दिन (अभिन्न) दिनों को 18:00 पर जोड़ना। यह, कटौती से, उस तारीख को प्रस्तुत करना चाहिए जिसकी तारीख FromDate है, लेकिन समय भाग 18:00 तक तय किया गया है।

+0

+1 अतिरिक्त स्मार्ट - बस समय के साथ बहुत सहज और रखरखाव योग्य नहीं है :-) अब 6, 12 महीने में इसे किसने समझ लिया होगा? बेहतर अपने कोड में एक अच्छी टिप्पणी छोड़ दो! :-) –

+1

@marc_s - पहली, दूसरी या तीसरी बार जब आप इसे सामना करते हैं, तो यह बहुत सहज नहीं हो सकता है। लेकिन चूंकि यह दिनांक/समय में हेरफेर के लिए मेरा "जाने-जाने" पैटर्न है, इसलिए किसी भी समय मेरे साथ काम करने वाला कोई भी व्यक्ति पैटर्न को सीखता है। –

संबंधित मुद्दे