今天和接下来 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 b
与 x >= 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
我在提取 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 b
与 x >= 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