今天和接下来 30 天之间的日期不工作

WHERE date BETWEEN today and next 30 days not working

我在提取 30 天内到期的记录时遇到了一些麻烦。我正在使用的数据库将日期存储在 char(10) 字段中,格式为 103(dd/mm/yyyy 或 10/12/2021)。我使用转换函数使这个日期可用,但是当我尝试将它与中间查询一起使用时,它失败了:

WHERE 
    CONVERT(Date, SUBSTRING(TDate, 1, 10), 103) 
        BETWEEN DATEADD(DAY, 30, GETDATE()) AND GETDATE()

现在我怀疑它失败了,因为GETDATE()默认格式是yyyy-mm-dd-time,所以比较不会起作用。我的问题是,如何将 GETDATE() 转换为格式 103 以获得正确的比较,还是将我的 TDate 字段转换为其他内容以使其正常工作?

表达式 x BETWEEN a AND bx >= a AND x <= b 相同。

现在 GETDATE() + 30 总是会大于 GETDATE() 所以这个条件对于 任何值都不会成立 — 就像 x >= (y + 30) and x <= y 不能对任何 x 和 y 成立。

那么我们还有另一个问题,您正在比较日期和日期时间。如果日期为 2021-12-10 且当前日期时间为 2021-12-10 12:00 PM,则当您检查日期 >= 日期时间时,比较将 return 为假。我推荐以下内容:

WHERE CONVERT(DATE, tdate, 103) >= CAST(GETDATE() AS DATE)
AND   CONVERT(DATE, tdate, 103) <= DATEADD(DAY, 29, CAST(GETDATE() AS DATE)) -- the range [0, 29] contains 30 days