2013-04-09 3 views
2

저는 GoDaddy 기반 SQL Server 2005를 사용하여 웹 사이트의 판매를 저장하고 있습니다. smalldatetime으로 포맷 된 datePaid 열이 있습니다. 나는 데이터베이스를 조회 할 때이 쿼리를 사용하여 특정 날짜에 대한 모든 주문을 표시합니다 :쿼리에서 모든 레코드를 가져 오지 못함

SELECT DISTINCT 
    purchase.orderID, wfRegister.firstName, wfRegister.lastname, 
    storeOrder.subtotal, storeOrder.handling, storeOrder.total, 
    storeOrder.datePaid, storeOrder.dateOrdered, storeOrder.paypalID 
FROM 
    wfRegister 
INNER JOIN 
    (storeOrder INNER JOIN purchase ON storeOrder.orderID = purchase.orderID) ON wfRegister.customerID = storeOrder.customerID 
WHERE 
    storeOrder.deleted = 0 
    AND storeOrder.datePaid BETWEEN '03/21/2013' AND '03/21/2013' 
ORDER BY 
    storeOrder 

나는 단지 하나 개의 기록이 정확하지 않은 21, 반환받을. 쿼리를 storeOrder.datePaid BETWEEN '03/21/2013' AND '03/22/2013으로 변경하면 21 번째로 7 개의 레코드가 반환되지만, 22 번째 레코드는 내가 원하지 않는 레코드를 얻습니다. 거기에 21 일에 대한 datePaid 필드를 쿼리하고 반환되는 모든 7 레코드를 얻을 수있는 방법이 있나요? 내 클라이언트가 데이터를 Excel로 가져오고 22 번째 레코드를 삭제하지 않고 21 번째 레코드를 가져 오지 않으려합니다.

+2

열의 데이터 유형은 무엇입니까? 이렇게하면 storeOrder.datePaid> = '03/21/2013 '및 storeOrder.datePaid <'03/22/2013'대신에 무엇을 얻게됩니까? – JAQFrost

답변

2

문자열을 사용하여 SQL Server에서 날짜 산술을 수행하려면 항상 ISO -8601 표준 형식 : YYYYMMDD - 이는 형식으로 지역 및/또는 언어 설정과 독립적입니다.

안정적으로, 당신은 BETWEEN 편리 보인다

AND storeOrder.datePaid >= '20130321' AND storeOrder.datePaid < '20130322' 

를 사용해야 주어진 일에서 모든 주문을 얻으려면 -하지만 포함, 예를 들면이다 당신도 3 월 22 일부터 데이터를 얻습니다.

이 절은 시간에 관계없이 3 월 21 일의 모든 레코드를 제공하지만 22 번째 레코드는 제공하지 않습니다.

+0

미적 목적을 위해 (그리고 구문을 준수하기 위해) 역 따옴표를 아포스트로피로 변경하십시오. –

+1

이것에 대해 많은 감사드립니다. ISO-8601 형식이 작동하고 문제가 해결되었습니다! –

관련 문제