2012-06-08 6 views
-2

나는 쿼리를 작업 중입니다.SQL을 DATETIME에서 VARCHAR로 변환 하시겠습니까?

DECLARE @YesterDay DATETIME, @Today DATETIME 

SET @YesterDay = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) 
SET @Today = DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0) 
select @YesterDay = convert(varchar, getdate()-1 , 110) 
select @Today = convert(varchar, getdate() , 110) 
EXEC @return_value = [dbo].[post_sec_admin_list_user_log] 
     @pDateFr = @YesterDay , 
     @pDateTo = @Today, 
     @pName = '', 
     @pSec = NULL 


@DateFr is varchar(50) 
@DateT0 is varchar(50) 
@dateFr

@dateTo

.. 모두 varchar 있습니다 그리고 내가 그것을 실행하려고,이 2011-06-09 16:15:38.927

오류 문

의 전환으로 시간 형식을 인쇄 datetime 데이터 형식에 대한 varchar 데이터 형식이 범위를 벗어난 값을 가져 왔습니다.

또한, 내가 필요로하는 varchar 형식은 MM-DD-YYYY

사람은 내 오류에 어디 있는지입니까?

감사

+3

질문에 오류를 넣으십시오! –

+0

안녕하세요, 편집했습니다. 이미 – cheeseng

+1

어떤 RBDMS? 나는 SQL Server를 추측하고있다. 나는 또한 당신이 코드를 게시하지 않은'post_sec_admin_list_user_log' 저장 프로 시저 내에서 에러가 발생했다고 추측한다. – Bridge

답변

0

내 생각 엔 그 GETDATE()입니다 - 한 부분은 잘못된 것입니다.

또한 dateadddatediff으로 변경 했습니까? 이런 식으로 시도 :

SET @YesterDay = dateadd(dd, -1, GETDATE()) 
SET @Today = GETDATE() 
select @YesterDay = convert(varchar(50), dateadd(dd, -1, getdate()) , 110) 
select @Today = convert(varchar(50), getdate() , 110) 
EXEC @return_value = [dbo].[post_sec_admin_list_user_log] 
     @pDateFr = @YesterDay , 
     @pDateTo = @Today, 
     @pName = '', 
     @pSec = NULL 
+0

코드가 더 좋지만 제출 된 OP 코드는 "어제"를 올바르게 계산합니다. 하지만 그것이 문제의 원인이 아닙니다. 문제는 어제와 오늘은 DATETIME으로 정의되어 있으며 varchar로 전달하려고합니다. –

+0

실제로 @FedorHajdu :) –

1

귀하의 코드가 혼란 : 그래서

DECLARE @YesterDay DATETIME, @Today DATETIME 
SET @YesterDay = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) 
SET @Today = DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0) 
select @YesterDay = convert(varchar, getdate()-1 , 110) 
select @Today = convert(varchar, getdate() , 110) 

당신은 참조 DateDiff와 설정 값이 다음 사용하여 계산 된 날짜의 VARCHAR 표현으로 그 값을 덮어, DATETIME로 선언 다른 방법.

@ 어제와 @Today 변수는 그렇게 선언 되었기 때문에 여전히 DATETIME입니다.

편집 : 내 대답에 대한 의견에서 언급했듯이 절차에 전달할 변수가 필요합니다. 그래서 정확한 수정은 변수를 처음에 VARCHAR (50)로 선언하고 변환을 직접 수행하는 것입니다.

DECLARE @YesterDay VARCHAR(50), @Today VARCHAR(50) 
SELECT @YesterDay = convert(varchar(50), dateadd(dd, -1, getdate()) , 110) 
SELECT @Today = convert(varchar(50), getdate() , 110) 

그런 다음 처음에했던 것처럼 절차를 호출하십시오.

+1

사실 매개 변수를 전달할 때 변수 또는 정적 값 이외의 다른 것을 사용할 수 없으므로 CONVERT (varchar, @Yesterday, 110)는 변수에 먼저 할당해야합니다. – MartW

+0

@ CodeByMoonlight 맞아, 고마워, 고쳤다. –