【发布时间】:2018-12-16 19:40:18
【问题描述】:
我创建了一个“每日销售查询”,用于捕获从周一至周五上午 8 点运行的前一个工作日输入的所有总销售额。
问题是,如果今天是星期一,我如何捕获星期五的记录。 这样我就可以排除周末了。
因为如果是星期一,总销售额显示为 0,这实际上是有意义的,因为星期日不是工作日。请帮忙。
查看我当前的代码:
SELECT
CONVERT(VARCHAR, DATEADD(dd, - 1, GETDATE()), 103) AS Date,
'Sales Orders' AS Type,
COUNT(o.SalesOrderID) AS Orders,
SUM(d.QtyOrdered) AS Chairs,
ISNULL(ROUND(SUM(d.ExtendedPrice), 2), 0) AS [Total Ex GST]
FROM
dbo.SalesOrder o
LEFT OUTER JOIN
dbo.SalesOrderDetails d ON o.SalesOrderID = d.SalesOrderID
WHERE
(o.EntryDate >= CONVERT(CHAR(8), DATEADD(dd, - 1, GETDATE()), 112))
AND (o.EntryDate < CONVERT(CHAR(8), GETDATE(), 112))
AND (o.CustomerID <> 187);
【问题讨论】:
-
请学习以可读格式格式化您的 SQL。
-
另外,在使用
(n)(var)char声明/转换时,请务必确保声明您的长度。另请注意,“三部分和四部分列引用”。已弃用。当您引用一个列时,您只需要提供表名/别名和列名。您不应包含架构和数据库名称。 -
为什么要将日期转换为字符进行比较?
-
他们不是@DaleBurrell 只是
GETDATE()。我认为他们在CONVERT(date,GETDATE())上很有效,因为样式 112 是 ISO 格式 (yyyyMMdd)。这是一种相当奇怪的做法,并且暗示 OP 正在使用datetime来存储始终具有时间值00:00:00.000的数据。
标签: sql sql-server