【问题标题】:Using VBscript and SQL on an Access database how do you select records based on a date comparison with todays date在 Access 数据库上使用 VBscript 和 SQL 如何根据与今天日期的日期比较来选择记录
【发布时间】:2020-09-17 21:25:27
【问题描述】:

这听起来像是一个非常幼稚的问题,但我无法让这个简单的要求发挥作用。在网站的一个页面上进行选择,将参数 time_period(即 1、7、31 或 365)传递到下一页,该页面应列出 LastUpdated 日期(Access db 中的标准日期字段)的所有选定记录) 在当前日期的这么多天之内。

对于单个数字(1 和 7),我得到一个结果,但不是 100% 准确,31 和 365 只有非常奇怪的结果。我想某处的格式存在不一致,但我找不到解决方案。

Dim my_time_period
my_time_period = Request.QueryString("time_period")
selection_list.Source = "SELECT *  FROM document WHERE DateDiff('d',LastUpdated,now) <= '"+my_time_period+"'"

我尝试了如下硬编码一个数字,但得到了相同的结果。

selection_list.Source = "SELECT *  FROM document WHERE DateDiff('d',LastUpdated, now) <= '7'"

我也尝试过使用 Today 而不是 now,但它被作为错误抛出。有人可以帮忙吗?谢谢你

【问题讨论】:

    标签: sql date ms-access vbscript


    【解决方案1】:

    你在比较一个数字

    DateDiff('d',LastUpdated, now)
    

    到一个字符串

    '7'
    

    而是将数字与数字进行比较:

    "SELECT *  FROM document WHERE DateDiff('d',LastUpdated,now) <= "+my_time_period
    

    注意区别:没有单引号

    另外请注意,这是在邀请 SQL 注入。

    另外请注意,在使用索引的数据库中,此表达式应重写为:

    SELECT *  FROM document WHERE LastUpdated > DateAdd('d',now,-"+my_time_period+")"
    

    这样您就可以将列(可能已编入索引)与固定值进行比较。不过,在 MS Access 中这并不重要

    【讨论】:

    • 尼克,非常感谢。它完全按照你说的那样工作。我必须尝试更多地了解 VBscript 格式化其变量的方式。
    • 这里真正的问题是您需要了解数据类型(无论是在 VBScript 中还是在数据库中)。这与格式无关。随意接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多