2013-03-05 7 views
5

मैं मौजूदा datetime एसक्यूएल सर्वर में T-SQL का उपयोग कर मूल्य के लिए time मूल्य जोड़ने के लिए 2012एक समय क्षेत्र के साथ datetime क्षेत्र को जोड़ने के लिए कैसे

मैं सोच रहा था कि DATEADD समारोह में यह एक समाधान हो सकता है, लेकिन यह है नहीं ...

शायद मेरे पास timedatetime में कनवर्ट किया गया है?

तो मेरे पास है

StartDate 2013-02-18 18: 34: 40.330 (दिनांक)

अंतराल 00: 11: ००.००,००,००० (समय)

EndDate? tsql? (डेटाटाइम)

कोई सुराग?

उत्तर

8

ऐसा कुछ करने का प्रयास करें। नोट: मैं मिलीसेकेंड यहाँ नहीं ले रही हूँ

declare @dt datetime = getdate() 
declare @t time = '01:35:45' 

select dateadd(second, 
        datepart(hour,@t) * 3600 + 
        datepart(minute,@t) * 60 + 
        datepart(second,@t), 
        @dt) 
22
DECLARE @d DATETIME = '2013-02-18T18:34:40.330', 
     @t TIME(7) = '00:11:00.0000000'; 

SELECT EndDate = DATEADD(SECOND, DATEDIFF(SECOND, 0, @t), @d); 

परिणाम:

EndDate 
----------------------- 
2013-02-18 18:45:40.330 

अब, तुम सच में नहीं अंतराल एक time स्तंभ में संग्रहीत किया जाना चाहिए। timeबिंदु पर अवधि पर प्रतिनिधित्व करने के लिए है। क्या होता है जब अंतराल> = 24 घंटे होता है? आपको किसी ईवेंट के प्रारंभ समय और समाप्ति समय को स्टोर करना चाहिए (वे चीज़ें आमतौर पर कम से कम अवधि के रूप में प्रासंगिक होती हैं), और आप हमेशा उन बिंदुओं की अवधि की गणना कर सकते हैं।

+0

अंतिम पैराग्राफ के लिए धन्यवाद! हां मैं अंतराल <24 घंटे स्टोर करता हूं। –

+3

लेकिन * अंतराल * को 'समय' के रूप में संग्रहीत करने का क्या मतलब है? क्यों न केवल सेकंड की संख्या स्टोर करें? –

+0

जब हमारे पास स्थिर टेबल हैं जो सीधे उपयोगकर्ताओं द्वारा दर्ज की जाती हैं, तो समय के साथ स्टोर करना फायदेमंद है, इसलिए इसे समझना आसान है। सेकंड प्राप्त करने के लिए DATEDIFF का उपयोग करने के लिए यह बहुत चालाक है। धन्यवाद। –

2

मैं हाल ही में Azure-DB का उपयोग कर रहा हूं और नीचे दिए गए कोड को आजमाया है। इस एसक्यूएल 2012 में काम नहीं करता है एसक्यूएल की तारीख arithmetics बारे में अधिक जानकारी के लिए यह पोस्ट देखें: Difference in datetime and time arithmetic in Azure-DB vs. sql-server 2008R2

मैं थोड़ा पार्टी के लिए देर हो रही है, लेकिन स्पष्ट तरीका है, क्योंकि यह याद आ रही है करने के लिए ...

DECLARE @StartDate datetime 
DECLARE @Interval time 
DECLARE @EndDate datetime 
SET @StartDate = '2013-02-18 18:34:40.330' 
SET @Interval = '00:11:00.000000' 

SET @EndDate = @StartDate + @Interval 

SELECT @StartDate StartDate, @Interval Interval, @EndDate EndDate 

Output: 
StartDate     Interval    EndDate 
2013-02-18 18:34:40.330 00:11:00.0000000 2013-02-18 18:45:40.330 
संबंधित मुद्दे