【发布时间】:2020-02-24 23:27:46
【问题描述】:
我有两个日期字段下拉菜单,最终用户可以从中选择开始日期和结束日期。但是,当我运行查询时,我错过了第一个日期,即 - 我选择了 9 日至 15 日,但我得到了 10 日至 15 日的记录。
我的想法是以某种方式从下拉菜单中获取日期并手动硬编码开始和结束时间(00:00:00 和 24:00:00)
我想我也许可以这样做,但我的代码不起作用。
Private Sub FindItem2()
SQL2.AddParam("@datestart", dateStart.Value.ToShortDateString + '00:00:00')
SQL2.AddParam("@dateend", dateEnd.Value.ToShortDateString + '24:00:00')
LoadGrid("SELECT SUBSTRING(CustomerNumber, PATINDEX('%[^0]%', CustomerNumber+'.'), LEN(CustomerNumber)),'D','CAFET','', sum(Total) as totalsales FROM ViewDetailedSalesReport WHERE CustomerNumber is not null AND DateSold BETWEEN (@datestart) AND (@dateend) GROUP BY CustomerNumber, CustomerLastName ORDER BY CustomerLastName ASC; ")
End Sub
编辑新的:
我删除了我的代码,而不是尝试修改它。我使用了 Cetin 的代码并通过将变量移到顶部、删除标签并在查询周围添加引号来对其进行了调整。之后它就可以正常工作了。
Private Sub FindItem2()
SQL2.AddParam("@datestart", dateStart2.Value.Date)
SQL2.AddParam("@dateend", dateEnd2.Value.Date.AddDays(1))
Dim cmd As String = "SELECT SUBSTRING(CustomerNumber, PATINDEX('%[^0]%', CustomerNumber+'.'),
LEN(CustomerNumber)),
'D','CAFET','',
sum(Total) as totalsales
FROM ViewDetailedSalesReport
WHERE CustomerNumber is not null AND
DateSold >= @datestart AND DateSold <@dateend
GROUP BY CustomerNumber, CustomerLastName
ORDER BY CustomerLastName ASC;"
LoadGrid(cmd)
End Sub
旧版编辑: 我让查询“正确”工作,但我不确定这是完成此任务的最佳实践方式。
Private Sub FindItem2()
SQL2.AddParam("@datestart", dateStart2.Value)
SQL2.AddParam("@dateend", dateEnd2.Value)
LoadGrid("SELECT SUBSTRING(CustomerNumber, PATINDEX('%[^0]%', CustomerNumber+'.'), LEN(CustomerNumber)),'D','CAFET','', sum(Total) as totalsales FROM ViewDetailedSalesReport WHERE DateSold >= DateAdd(day,-1,@datestart) AND DateSold < (@dateend) GROUP BY CustomerNumber, CustomerLastName ORDER BY CustomerLastName ASC; ")
End Sub
我按照 Cetin 的建议使用 >= 和
DateSold >= DateAdd(day,-1,@datestart) AND DateSold < (@dateend)
【问题讨论】:
-
24 小时制永远不会读取“24:00:00”,因为它与“00:00:00”相同。您可能想改用“23:59:59”作为“结束时间”。
-
您的修改与我的不符。请将时间部分放在一起,不要转换为字符串。只需将参数添加为 DateTime 值(使用 dtPicker.Value.Date 删除时间部分。
-
ViewDetailedSalesReport.DateSold是什么数据类型?如果是DATETIME,表中的值是否真的有时间,或者时间都归零了?同样的问题适用于脚本中的datestart和dateend变量。他们是DATES、DATETIMEs 还是DATETIMEs 的次数为零? -
@digital.aaron - 他们是没有时间的约会。它们在原始导出中显示为 YYYYMMDD。 @Cetin Bosoz - 完全删除了我的代码,并修改了你的代码以在环境中工作。我让它正常工作。我再次编辑了 OP 以反映更改。我只是无法理解为什么我的原始代码会中断一天,以及为什么将其更改为 >= 和
-
然后将所有日期时间转换为日期以进行比较。它将大大简化事情。此外,如果想出了适合您的解决方案,您可以将其发布为您自己问题的答案。