【发布时间】:2022-01-15 08:21:37
【问题描述】:
我在提取 30 天内到期的记录时遇到了一些麻烦。我正在使用的数据库将日期存储在 char(10) 字段中,格式为 103(dd/mm/yyyy 或 10/12/2021)。我使用一个转换函数来使这个日期可用,但是当我尝试将它与一个 between 查询一起使用时它失败了:
WHERE
CONVERT(Date, SUBSTRING(TDate, 1, 10), 103)
BETWEEN DATEADD(DAY, 30, GETDATE()) AND GETDATE()
现在我怀疑它失败了,因为GETDATE() 默认格式为 yyyy-mm-dd-time,所以比较不起作用。我的问题是,如何将 GETDATE() 转换为格式 103 以获得正确的比较,或者将我的 TDate 字段转换为其他内容以使其正常工作?
【问题讨论】:
-
定义“失败”。你有错误吗?警告?
-
另一个很好的例子说明了您为什么要avoid
BETWEENfor date/time calculations。这是原因之一——它不像看起来那么直观。不必重复TDate的表达式有更好的解决方案——一劳永逸地转换数据,或添加计算列,或在表顶部使用视图。所有这些也将消除其他人重新发明轮子的需要。 -
没有错误@SalmanA,只是没有结果应该有。
标签: sql sql-server datetime intervals