2014-11-04 8 views
-1

날짜를 사용하여 SQL에서 데이터를 가져 오는 방법, 날짜 데이터 형식을 varchar로 사용하고 있습니다. SQL 테이블에서 레코드를 가져 오려고합니다. 지난 달 데이터를 가져 오려고합니다. 예를 들어 오늘 날짜는 2014 년 4 월 11 일입니다. 오늘부터 1 개월 후 04/10/2014까지이 날짜까지 검색하고 싶습니다. 04/10/2014날짜를 사용하여 SQL에서 데이터를 가져 오는 방법

이 쿼리를 시도했습니다.

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
    AND OrderDate <= (CONVERT(VARCHAR(50), '04/10/2014', 103)) 

그러나 그 또한 11 월 한 달 데이터를 보여주는 :

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
    AND OrderDate <= '04/10/2014' 

는 또한이 시도. 이것을 얻는 방법?

+3

_ "iam은 날짜 데이터 유형을 varchar로 사용합니다."_ 왜 ?? –

+3

_i 날짜 데이터 유형을 varchar_로 사용하는 이유는 무엇입니까? 왜 그것들을 정확히'datetime' 또는'datetime2' 컬럼 타입으로 유지하지 않습니까? –

+0

또한 최대 종료 날짜를 고려하려면 SQL에 지정하지 않는 이유는 무엇입니까? –

답변

0

합리적으로 DateTime 데이터 형식으로 OrderDate를 사용해야합니다. 그러나 여전히 질문에 답하는 경우 Datetime Datatype에 OrderDate를 캐스팅하고 WHERE 조건에서 필터링을 위해 논리적 연산을 적용해야합니다.

따라서, 쿼리는 것입니다 :

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND CONVERT(DATETIME,OrderDate,103) <= CONVERT(DATETIME,'04-OCT-2014',103) 
+0

DateTime 변환 오류를 피하려면 DateTime 값을 'DD-MMM-YYYY'형식으로 전달하는 것이 좋습니다. –

+0

감사합니다. 괜찮습니다. – Sarvan

0

어떤 이유로 든 적절한 데이터 형식으로 열을 변경할 수없는 경우 쿼리의 datetime으로 변환하는 것이 좋습니다.

E.G.

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
    AND CAST(OrderDate as DateTime)<= '04/10/2014' 
1

1) 주문일 열 형식은 문자열 값보다 VARCHAR 인 경우 "<는 ="좋은 연산자가 아니라 그 데이터 타입은 날짜, 시간 또는 날짜 인 경우 "< =", "> ="보다 잘 작동합니다. 그래서 datetime으로 변환하고 그것을 비교하는 것이 좋습니다.

2) 시작일과 종료일이 더 나은 경우 OrderDate 열을 datetime으로 변환 한 다음 "between"절을 사용하여 비교하는 것이 좋습니다.

예 :

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND (CONVERT(DATE, OrderDate) BETWEEN CONVERT(DATE, GETDATE()) AND CONVERT(DATE, '04-OCT-2014')) 
--If SQL Server 2008 or above 

--Or For below 
SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND (CONVERT(DATETIME, OrderDate) BETWEEN GETDATE() AND CONVERT(DATETIME, '04-OCT-2014')) 
관련 문제