sSQL = "
SELECT ordID, ordName, ordDate, ordShipping, ordStateTax,
ordHandling, ordTotal, ordDiscount, ordPrivateStatus
FROM orders
WHERE (ordStatus = 7)
"
Run Code Online (Sandbox Code Playgroud)
我想将昨天收到的订单显示为我正在构建的每日报告脚本
我该怎么办?
SQL Server 2005
ordDate
有这种格式: 2015-01-28 14:58:49.000
就粒度和可调整性而言,开放式范围是最安全的,并且不受底层数据类型更改的影响:
DECLARE @today DATETIME;
SET @today = DATEADD(DAY,DATEDIFF(DAY,'20000101',GETDATE()),'20000101');
SELECT ... WHERE ordDate >= DATEADD(DAY,-1,@today)
AND ordDate < @today;
Run Code Online (Sandbox Code Playgroud)
您可能会收到有关其他创造性方法的建议,以查找昨天的行,但它们会不太安全和/或速度较慢。你可能会收到这样的建议:
WHERE CONVERT(CHAR(10), ordDate, 112) = CONVERT(CHAR(10), GETDATE(), 112);
-- not sargable! Will cause a table/index scan even if there is an index on ordDate
WHERE ordDate BETWEEN <yesterday at mignight> AND <yesterday at 23:59:59.997>
-- unsafe! Will break if variables or underlying columns change data types
Run Code Online (Sandbox Code Playgroud)
一些链接:
关于最后一个,请注意性能图表,特别是开放式范围的表现。
当您迁移到 SQL Server 2008 或更高版本时,您还可以考虑更简单的CONVERT(DATE
方法,因为这是将函数应用于列仍然可以进行的极少数孤立场景之一。但是,您还应该阅读以下内容:
要为此创建一个过程,请在 SQL Server 中:
CREATE PROCEDURE dbo.myreport
@ReportDate DATETIME = NULL
AS
BEGIN
SET NOCOUNT ON;
-- report on yesterday if parameter is NULL:
SET @ReportDate = COALESCE(@ReportDate, DATEADD(DAY, -1, GETDATE()));
-- remove time from datetime, in case time is passed:
SET @ReportDate = DATEADD(DAY, DATEDIFF(DAY, '20000101', @ReportDate), '20000101');
SELECT ordID, ordName, ordDate, ordShipping, ordStateTax,
ordHandling, ordTotal, ordDiscount, ordPrivateStatus
FROM dbo.orders
WHERE (ordStatus = 7)
AND orderDate >= @ReportDate
AND orderDate < DATEADD(DAY, 1, @ReportDate);
END
GO
Run Code Online (Sandbox Code Playgroud)
现在在您的 ASP 代码中,打开 之后oConn
,您可以执行以下操作:
set cmd = CreateObject("ADODB.Command")
cmd.Activeconnection = oConn
cmd.CommandText = "dbo.myreport"
cmd.commandType = 4 'adCmdStoredProc
dateParam = date()
cmd.parameters.Append ccmd.CreateParameter("ReportDate", adDate, 1, 0, dateParam)
set oRS = cmd.execute()
do while not oRS.eof
...
Run Code Online (Sandbox Code Playgroud)
抱歉,我的经典 ASP 生锈了,所以您可能需要进行调整。值得庆幸的是,有许多站点包含有关在经典 ASP 中使用连接、命令和记录集对象的教程。