2014-04-28 3 views
-1

특정 datetime 변수를 사용하도록 지정합니다. 코드는 다음과 같을 것이다 :SQL의 변수에 대한 특정 날짜 설정

Declare @Year = int 
Declare @JanDate = Datetime 

Set @JanDate = ??? 

내가 월 = 1 @JanDate를 설정하려는, 일 = 25 년 = @ 년. 그것을 위해 무엇을 넣을 지 모르십니까?

+1

설정 년, @ 년 + '-01-25'내 추측 일 것이다. – Hituptony

+0

연도는 사용자 정의 변수입니다. JanDate는 특정 월과 일이지만 사용자 입력 @Year를 사용해야합니다. – user3532047

+0

당신은 기본적으로 그냥 년을 구문 분석하고 변수를 삽입 + 사용하고자하는 특정 월과 일 – Hituptony

답변

-4
Declare @Year int; 
SET @Year = 2013; 
Declare @JanDate Datetime; 

SET @JanDate = CAST(
       CAST(@Year AS NVARCHAR(4)) + CAST('01' AS NVARCHAR(2)) + CAST('25' AS NVARCHAR(2)) 
       AS DATETIME) 
SELECT @JanDate 


RESULT: 2013-01-25 00:00:00.000 

또는 단순히

Declare @Year int; 
SET @Year = 2013; 
Declare @JanDate Datetime; 

SET @JanDate = CAST(
       CAST(@Year AS NVARCHAR(4)) + '01' + '25' 
       AS DATETIME) 
SELECT @JanDate 

RESULT: 2013-01-25 00:00:00.000 
+0

적 누가 투표를 남겨두고, 제발 코멘트를 남겨주세요 신경? –

+0

"DATE는 정의 된 시스템 유형이 아닙니다." – user3532047

+0

@ M.Ali 또한 'DATETIME'으로 직접 변환하여 잠재적 인 문제를 피할 수 있다면 'DATE'로 변환 할 필요가 없습니다. – Lamak

-2

귀하의 DECLARE 문은 SQL의 버전에 따라 올바르지 않을 수 있습니다. , 사람들을 위해

DECLARE @Year int 
DECLARE @JanDate Datetime 
SET @Year=2013 
SET @JanDate='1/25/'+CAST(@Year AS VARCHAR) 
+2

'mm'은 무엇입니까? 먹을 수있는 M & M이 맞습니까? –

+0

@DaveJemison 적어도 날짜에 대해서는 ISO 형식을 사용해야합니다 :'YYYY-MM-DD' – gvee

1

SQL 서버 2012을 사용하고있는 DATEFROMPARTS, DATETIMEFROMPARTS, DATETIME2FROMPARTS, 또는 SMALLDATETIMEFROMPARTS 기능 중 하나를 사용하십시오 (당신은 당신이 원하는 년간 @ 년을 변경해야합니다) 다음과 같은 작업을해야 . SQL 2005를 사용 중이므로 이러한 기능을 사용할 수 없지만 2012 년 또는 그 이후의 누군가가이 질문을 향후에 발견 할 경우를 대비하여 어쨌든 포함 시키려고합니다. 예를 들어

: 포스터 우리의 사람들을 위해

declare @Year int = 2014 
declare @JanDate datetime 

select @JanDate = DATETIMEFROMPARTS(@Year, 1, 25, 0, 0, 0, 0) 

여전히 SQL 서버 2005, 당신이 함께 문자열을 연결하고 날짜에 그 변환 할 수 있습니다 사용 :

declare @Year int = 2014 
declare @JanDate datetime 

select @JanDate = CAST(CAST(@Year as varchar) + '-1-25' as varchar) 

또는 참조 복수의 DATEADD 함수를 사용하는보다 효율적인 방법에 대한 답은 this question입니다.

+0

+1 for'DateTimeFromParts' – gvee

1

문자열을 날짜로 변환하는 것을 좋아하지 않습니다. 너도 마찬가지야.

SQL Server 2012 이상을 사용하는 경우또는 이와 유사한 기능인 Paul Williams가 제공 한 답변을 사용할 수 있습니다.

DECLARE @Year int; 
DECLARE @JanDate datetime; 

SET @Year = 2014; 

SET @JanDate = DateAdd(dd, 25 - 1, DateAdd(yy, @Year - 1900, '1900-01-01')); 

SELECT @JanDate; 

그것은 일부에 지나치게 복잡하게 보일 수도 있지만,이 작업을 수행하는 방식이 훨씬 더 만족스러운 [나]는 아무것도 사용하지 같다 : 이전 버전의

여기 내가 사용하는 것이 방법이다 그러나 날짜와 정수.

우리가

그런 다음 우리가 일 (다시, 일일의 보정이 같은 요구되는 수에 추가 (1천9백년 ;-)에 의해 수정) 공급 년의 수에 추가 SQL 서버 기준일 1900-01-01에서 시작 우리가 작업하고있는 날짜는 이미 매달 1 일이므로 우리가 원하는 25 개가 아닌 25 = 26 개를 추가합니다.


다음은 유용한 추가 코드입니다. 그것은 당신에게 그것을 밖으로 작동합니다 그것은 어떤 년, 월 및 일 공급하십시오.

사용자가 "유효하지 않은"값 (예 : 2014-02-31 - 2 월 31 일이 없음)을 제공하는 경우 텍스트는 현재까지의 텍스트와 달리 실패하지 않습니다. 대신 그 결과는 2014-03-03이고, 이는 2 월 1 일 31 일 후입니다.

이 논리는 사람들을 기쁘게하지는 않지만 항상 나를 위해 일해 왔습니다.

충분이 waffling, 여기에 코드입니다 : = 2014

DECLARE @y int 
     , @m int 
     , @d int; 

SET @y = 2014; 
SET @m = 6; 
SET @d = 22; 

SELECT DateAdd(dd, @d - 1, DateAdd(mm, @m - 1, DateAdd(yy, @y - 1900, '1900-01-01'))); 

-end transmission-

+0

당신은 또한 '1900-01-01 '을 (묵시적으로) :) –

+0

@ypercube 예, 알아, 쉿';-)'. 모든 진지하게, 나는 누군가가 그것에 관해 생각해 낼 것임을 압니다. 일반적으로 저는'0'을 사용합니다.하지만 여기서는 약간 더 명확하게 만들 것이라고 생각했습니다. – gvee

+0

아니요, 저는 이것을 선호합니다. '0'을 사용하면 혼란 스러울 수 있습니다. –