只需要根据日期查询记录(给出示例查询)

1 sql-server-2005 sql-server

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

Aar*_*and 5

就粒度和可调整性而言,开放式范围是最安全的,并且不受底层数据类型更改的影响:

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 中使用连接、命令和记录集对象的教程。