我正在使用基于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日的所有记录
答案 0 :(得分:2)
对于使用字符串的SQL Server中的日期算术,我建议始终使用 ISO-8601 标准格式:YYYYMMDD
- 这是仅格式这与任何区域和/或语言设置无关。
为了可靠地获取某一天的所有订单,您应该使用
AND storeOrder.datePaid >= '20130321' AND storeOrder.datePaid < '20130322'
BETWEEN
似乎很方便 - 但它是包容性的,例如你也可以从3月22日那里得到数据。
此条款在此为您提供了3月21日的所有记录,无论他们的时间如何 - 但是从22日起都没有。