2011-01-31 7 views
2

SQL Server를 사용하여 datetime에서 연, 월, 일의 int 값을 변환해야합니다.SQL 서버에서 int 값을 datetime으로 변환

실제로 나는이

DECLARE @MONTH INT 
DECLARE @YEAR INT 
DECLARE @DAY INT 
DECLARE @MAXDATE DATETIME 
DECLARE @MINDATE DATETIME 

SET @MONTH=12 
SET @YEAR=2010 
SET @DAY=1 


SET @MINDATE=CONVERT(DATE,CAST (@YEAR AS VARCHAR)+ RIGHT ('0'+ CAST (@MONTH AS VARCHAR),2) + RIGHT ('0'+ CAST (@DAY AS VARCHAR),2)) 

SELECT @MINDATE 

하고 확인 작업을 사용하고 '하지만,이 값을 변환 할 수있는 더 좋은 방법이 존재하는 경우 궁금하네요.

답변

5

이 조금 더 간단 할 것이다 :

select dateadd(month,(@YEAR-1900)* 12 + @MONTH - 1,0) + (@DAY-1) 
1

나는이 일을 올바르게 수행 할 수 있다고 생각합니다. 이미 한자리 숫자의 달과 날짜를 0으로 채우고 있습니다. 당신의 솔루션은 잘 작동 할 것입니다.

유일한 다른 방법은 임의의 날짜를 사용하고 해당 시작 지점에 년, 월 및 일을 '추가'하는 것입니다. 그러나 이것은 훌륭한 계획이 아닙니다. 왜냐하면 당신이 계산할 때 12 월 31 일부터 시작해야하기 때문입니다. 현재하고있는 것처럼 구성 요소를 파싱하는 것보다 의미가 없습니다.

0

는 전까지 나는 놈의를 알 수있는 방법은 사기꾼 기능 내장으로 변환합니다. 키우면 수 년, 월을 VARCHAR로 유아용 하루를 선언 할 경우 , 그것은 쉽게 될 수 있습니다

SET DATEFORMAT YMD; 
SET @MAXDATE = @YEAR+'/'[email protected]+'/'[email protected] 
SELECT @MAXDATE 
+2

** 확실한가? 예를 들어 SQL Server에서 작동 할 것인가? "독일어"날짜 형식이 활성화 되었습니까 ?? 나는 매우 의심 스럽다. 만약 당신이 이것 (문자열 연결)을하면, ** please ** : ISO-8601 형식을 사용하라! 'YYYYMMDD' - 어떤 언어 환경에서도 모든 시스템에서 작동합니다 ... –

1

당신이 '더 나은 방법'에 의해 무엇을 의미하는지에 따라 허용되는 다른 대답을 찾을 수 있습니다. 예를 들어 문자열에서 변환하는 것이 스크립트에서 수행되는 방법보다 간단 할 수 있습니다. 이처럼 : 당신의 변수가 datetime 경우입니다

SET @MINDATE = CAST(@YEAR AS varchar) + '-' + 
       CAST(@MONTH AS varchar) + '-' + 
       CAST(@DAY AS varchar) 

는 변환 CONVERT를 사용하는 암시, 그래서 필요 없습니다. 여기에서 선택한 형식은 YYYY-MM-DD 또는 오히려 YYYY-M-D입니다. 로케일 설정에 관계없이 암시 적 변환에 허용되는 형식입니다.

편집 : 선택한 형식, YYYYMMDD은 내가 잘못하지 않은 경우에도 로케일과 무관합니다. 내 요점은 정수에서 적절한 문자열을 만드는 것이 더 복잡한 표현을 필요로한다는 것이 었습니다. 이것은 당신에게 불편을 줬습니다.

관련 문제