在过去90天内通知用户购买相同产品的逻辑语句是什么?
SQL = "SELECT id, PurchaseDate, ProductName from TableName where id = " & id)
Do Until objRS.EOF
if (objRS("ProductName") and objRS("PurchaseDate") <= dateadd(day,-90,getdate())) and objRS("ProductName") and isNull(objRS("PurchaseDate")) then
AlreadyPurchased = true
end if
objRS.movenext()
Loop
将其写入页面的循环:
<%=objrs("ProductName")%><% if AlreadyPurchased then%>Last Purchased with last 90 days<%end if %>
答案 0 :(得分:3)
最佳答案取决于一些假设:
A)您的查询不返回任何NULL值,并且
B)您先前已将产品名称存储在预先存在的变量中。
您的代码存在一些问题。
1)if (objRS("ProductName")
基本上是在询问字段集值是否为True
布尔值。我的第一个假设是,您已经知道要测试的产品名称。因此,上面的代码段应替换为:if (objRS("ProductName").value = strMyProductName
,其中strMyProductName
是存储产品名称(作为字符串)的变量。
2)您应该考虑将计算出的日期存储在循环外的变量中。如果您可以一次计算日期,将其存储在变量中并在比较中使用该变量,则无需重复计算日期。
3)删除条件and objRS("ProductName")
的最后一个组件,因为它是多余的,并且具有与我在上面的(1)中解释的逻辑相同的错误逻辑。
4)您的DateAdd()
可以写得更好。
TL; DR
dim strMyProductName, dat90, AlreadyPurchased
AlreadyPurchased = false
strMyProductName = "Shoes"
dat90 = dateadd("d", -90, now) '90 days ago
Do Until objRS.EOF
if cstr(objRS("ProductName").value)=strMyProductName and cdate(objRS("PurchaseDate")) <= dat90 then
AlreadyPurchased = true
exit do
end if
objRS.movenext()
Loop