2013-04-30 2 views
8

외부 원본에서 가져온 테이블이 Microsft SQL Server 2008 R2에 있습니다. 의 열은 다음과 같습니다. ID, Year, DAY, HOUR & Value 여기서 DAY은 일 (1에서 366까지)을 포함하고 HOUR은 0에서 23까지의 시간을 나타냅니다.SQL Server 2008 R2에서 연중 날짜 및 시간을 가져옵니다.

새 datetime 열을 만들고 Year, DAY & HOUR 열의 데이터에서 만든 dateTime으로 채우고 싶습니다.

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이 1900-01-01 00 : 00 : 00.000을 대표한다는 것을 몰랐다. –

4

에 상응하는 기능이 없습니다 : 그것은 2012 그 SQL 사실이다 (비록 당신에게 당신의 날짜를 줄 것이다

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

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

,536 : 오늘의 연도와 시간의 일, 다음을 사용 권리, 마침내 도착) 당신이 해있을 때

이 그것을 사용하기!

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

I 달 또는 달의 일이 없습니다. 나는 오직 해, 해의 날, 그리고 시간을 가지고있다. –

+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

나 자신을 위해 만들었고 공유하기에 좋은 장소라고 생각했습니다. 이것은 Mikael Eriksson의 샘플을 기반으로합니다.

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 
관련 문제