2013-04-30 4 views
8

में एक डेटाटाइम प्राप्त करें मेरे पास एक माइक्रोस्कोफ्ट SQL Server 2008 R2 में एक तालिका है, जो बाहरी स्रोत से आई है। निम्नानुसार कॉलम निम्नानुसार हैं: ID, Year, DAY, HOUR & Value, जहां DAY वर्ष का दिन (1 से 366 तक) और HOUR दिन के घंटे (0 से 23 तक) का प्रतिनिधित्व करता है।वर्ष से दिन और दिन के दिन SQL सर्वर 2008 R2

मैं एक नया डेटाटाइम कॉलम बनाना चाहता हूं और इसे Year, DAY & HOUR कॉलम में डेटा से बनाए गए डेटटाइम के साथ पॉप्युलेट करना चाहता हूं।

DateTime को अपने हिस्सों से बनाने के लिए मुझे किस SQL ​​फ़ंक्शन का उपयोग करना चाहिए?

SQL सर्वर 2012 DATETIMEFROMPARTS है, लेकिन वहाँ आप के बजाय निम्नलिखित इस्तेमाल कर सकते हैं SQL Server 2008 R2

+0

चेक आउट: http://stackoverflow.com/questions/207190/sql-server-string-to-date-conversion –

+0

संबंधित: http://stackoverflow.com/a/267016/327074 – icc97

उत्तर

7
declare @Year int = 2003 
declare @Day int = 100 
declare @Hour int = 13 

select dateadd(hour, @Hour, dateadd(dayofyear, @Day - 1, dateadd(year, @Year - 1900, 0))) 
+0

धन्यवाद एक टन! मुझे नहीं पता था कि 0 1 9 00-01-01 00: 00: 00.000 का प्रतिनिधित्व करता है। –

4

के लिए कोई समकक्ष समारोह है:

DECLARE @day int, @month int, @year int 
SELECT @day = 4, @month = 3, @year = 2011 

SELECT dateadd(mm, (@year - 1900) * 12 + @month - 1 , @day - 1) 

है कि आप अपनी तिथि दे देंगे (हालांकि यह सच है कि SQL 2012 यह सही हो जाता है, अंत में!)

जब आपके पास वर्ष, दिन का दिन और दिन का घंटा होता है, तो इसका उपयोग करने के लिए निम्न का उपयोग करें:

declare @year int, @dayofyear int, @hourofday int 
select @year = 2013, @dayofyear = 120, @hourofday = 12 

select dateadd(hh, @hourofday, dateadd(yy, @year - 1900, dateadd(dd, @dayofyear - 1, 0))) 
+0

मैं महीने, या महीने का दिन नहीं है। मेरे पास साल का दिन, दिन का दिन और दिन का घंटा है। –

+0

मैंने आपके उपलब्ध फ़ील्ड का उपयोग करने के लिए अपडेट किया है, जिसे शायद छोटा किया जा सकता है, लेकिन फिर भी यह काम करता है! – KaraokeStu

0

यहाँ एक वैकल्पिक समाधान है:

create table yourtable (yr int, dy int, hr int); 
insert into yourtable values (2013,100,5); 
insert into yourtable values (2013,1,1); 

select dateadd(hour,hr,dateadd(month, (yr - 1900) * 12 , dy - 1)) 
from yourtable 

अवधारणा तारीख करने के लिए घंटे जोड़ने के रूप में (वर्ष - 1900) साल का उपयोग कर, है, * माह के रूप में 12 की संख्या के साथ शुरुआत दिन।

2

ने खुद के लिए बनाया और सोचा कि यह साझा करने के लिए एक अच्छी जगह होगी - यह माइकल एरिक्सन द्वारा नमूना पर आधारित है।

CREATE FUNCTION [dbo].[DATETIME2FROMPARTS](
    @year int, 
    @month int, 
    @day int, 
    @hour int, 
    @minute int, 
    @second int, 
    @fractions int, 
    @precision int) 
RETURNS datetime2(7) 
AS 
BEGIN 
    RETURN 
     DATEADD(NANOSECOND, POWER(10, [email protected])*@fractions, 
     DATEADD(SECOND, @second, 
     DATEADD(MINUTE, @minute, 
     DATEADD(HOUR, @hour, 
     DATEADD(DAY, @day-1, 
     DATEADD(MONTH, @month-1, 
     DATEADD(YEAR, @year-1900, 
     CAST(CAST(0 AS datetime) AS datetime2(7))))))))); 
END 
संबंधित मुद्दे