2015-01-28 4 views
1

2 개의 날짜를 비교해야합니다. 하나의 datetime과 하나의 varchar가 필요합니다. 이렇게하려면 내 varchar datetime으로 변환하고 임시 테이블에 삽입하십시오.2 날짜와 cte를 비교하십시오

cte로 시도했지만 간단한 선택으로 동일한 결과가 작동하지 않았습니다.

내 요청이 임시 테이블에서 작동하고 cte로 작동하지 않는 이유는 무엇입니까? CTE를 사용

DECLARE @Tb TABLE 
( 
    DateCreation DATETIME, 
    DateAchat DATETIME 
) 

insert into @Tb 
SELECT 
    Convert(datetime, DateCreation, 120), -- varchar 
    Convert(datetime, DateAchat, 103), -- datetime 
FROM MyTable 


SELECT DISTINCT * FROM @Tb WHERE DateAchat > DateCreation ORDER BY OrderId ASC 

:

테이블 사용하여 당신은 당신의 CONVERT 발현 내부의 열 이름 주위에 따옴표를 가지고

WITH cte (DateCreation, DateAchat) 
AS (
    SELECT 
    Convert(datetime, DateCreation, 120), -- varchar 
    Convert(datetime, DateAchat, 103), -- datetime 
    FROM MyTable 
) 

SELECT DISTINCT * FROM cte WHERE DateAchat > DateCreationenter code here 
+0

"작동하지 않는다"고 말할 때 - 왜요? 오류, 결과 없음, 잘못된 결과가 나타 납니까? –

+0

내 오류는 "char 데이터 형식을 datetime 데이터 형식으로 변환하여 날짜/시간 값이 잘못되었습니다" – Ganbo

+0

여기에 뭔가 다른 것이 있습니다. 이 select 문은 다르게 동작하지 않습니다. 그것은 실제 코드가 아닙니다. @Tb에는 OrderID가 없습니다. – Paparazzi

답변

0

을 - 이것은 당신이 언급하는 경우 옳지 않다 기둥들. 이미 DATETIME 값의 CONVERT는 필요하지 않습니다. 당신은 더 넓은 범위의 필요하거나 더 정확한 시간은 당신이 DATETIME2의 데이터 유형을 사용할 수있는 경우

WITH cte (DateCreation, DateAchat) 
AS (
    SELECT 
    Convert(datetime, DateCreation, 120), -- varchar 
    Convert(datetime, DateAchat, 103) -- datetime 
    FROM MyTable 
) 

SELECT DISTINCT * FROM cte WHERE DateAchat > DateCreation 

날짜 시간 데이터 타입의 범위

12 월 31 일, 9999을 통해 1753년 1월 1일이다.

+0

미안 내 작은 따옴표는 내 실제 요청에, 그냥 내 예를 들어 – Ganbo

+0

그래,하지만 내가 일하는 임시 테이블을 사용했을 때 이해가 필요해 :) – Ganbo

+0

이 있음 간단한 경우 단일 SELECT, CTE 사용 또는 임시 테이블 사용간에 차이가 없습니다. 타이핑 실수 나 그와 비슷한 것을 추측 할 수 있습니다. –

관련 문제