在查询中没有获取所有记录

时间:2013-04-09 16:36:27

标签: sql sql-server-2005

我正在使用基于GoDaddy的SQL Server 2005来存储来自网站的销售额。我有datePaid列格式为smalldatetime。当我查询数据库以显示特定日期的所有订单时,使用此查询:

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条记录而不只是1?我的客户将数据导入Excel,并且不希望从第22页删除记录以获取21日的所有记录

1 个答案:

答案 0 :(得分:2)

对于使用字符串的SQL Server中的日期算术,我建议始终使用 ISO-8601 标准格式:YYYYMMDD - 这是格式这与任何区域和/或语言设置无关。

为了可靠地获取某一天的所有订单,您应该使用

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

BETWEEN似乎很方便 - 但它是包容性的,例如你也可以从3月22日那里得到数据。

此条款在此为您提供了3月21日的所有记录,无论他们的时间如何 - 但是从22日起都没有。