2010-04-22 1 views
1

모든 날짜가 모든 날짜가 정수로 저장되는 기존 데이터베이스에서 작업하는 중입니다. yyyy [3 digit day of year] 형식입니다. 나는 날짜로 변환하려면 다음 SQL을 사용하고율리우스 날짜 (yyyy [day of year])를 SQL datetime으로 변환하는 방법

2010-01-01 == 2010001 
2010-12-31 == 2010365 

: 예를 들어

DATEADD(d, 
    CAST(SUBSTRING(
      CAST(NEW_BIZ_OBS_DATE AS VARCHAR), 5, LEN(NEW_BIZ_OBS_DATE) - 4 
     ) AS INT) - 1, 
    CAST('1/1/' + SUBSTRING(CAST(NEW_BIZ_OBS_DATE AS VARCHAR),1,4) AS DATETIME)) 

은 사람이 할 수있는 더 간결한 방법이 있나요?

+0

어떤 데이터베이스를 사용하고 있습니까? – RedFilter

+0

SQL Server 2005 –

+0

이 형식의 이름이 있습니까? 또는 yyyy [3 digit day of year]보다 그것을 참조하는 더 좋은 방법입니까? –

답변

2

대신 using이 문자열의 숫자를 수행 할 수 있습니다

dateadd(day, NEW_BIZ_OBS_DATE % 1000 - 1, 
    dateadd(year, NEW_BIZ_OBS_DATE/1000 - 2000, '2000-1-1') 
) 

가 (2,010,356이 2010-12-31 있지만 2010-12-22 않음을 유의 2010365는 2010-12-31입니다..)

+0

Trixy, 두 번째 부분 ... 나는 좋아한다. :) – DVK

0

나는 적어도 하나의 단순화가 될 수 있다고 생각 : 내가 생각하는 다음과 같이

DATEADD(d, 
    NEW_BIZ_OBS_DATE % 1000 - 1, 
    CAST('1/1/' + SUBSTRING(CAST(NEW_BIZ_OBS_DATE AS VARCHAR),1,4) AS DATETIME) 
) 

두 번째 항은 또한 할 수있다.

CAST('1/1/' + CAST(NEW_BIZ_OBS_DATE/1000 AS VARCHAR) AS DATETIME) 
관련 문제