SQL Server:BETWEEN DATES 将记录带出期间
Posted
技术标签:
【中文标题】SQL Server:BETWEEN DATES 将记录带出期间【英文标题】:SQL Server : BETWEEN DATES brings records outside the period 【发布时间】:2017-10-04 14:55:45 【问题描述】:我正在使用一个应用程序(EHR 系统),需要在 s-s-rS 记录中携带特定日期范围内的记录。在脚本中,我格式化日期变量并应用于列。
Convert(varchar(10), @begdt, 101) + ' 00:00:00' and
Convert(varchar(10), @enddt, 101) + ' 23:59:59'
如果我将开始和结束日期设置为 01/01/2017 和 01/31/2017,那么它会提取与 02/01/2017 关联的记录。谁能帮我解决这个问题?
【问题讨论】:
为什么要将datetime
转换为字符串进行比较? Bad habits to kick : mis-handling date / range queries - Aaron BertrandWhat do between
and the devil have in common? - Aaron Bertrand
【参考方案1】:
不要将日期转换为字符串。当您这样做时,您允许 SQL Server 按字母顺序比较它们,而不是按实际日期顺序。
【讨论】:
【参考方案2】:也许您有语言冲突(美国与英国),而 SQL Server 实际上将该日期视为 1 月 2 日。 这篇文章提供了关于语言和日期的信息:(SQL Server Datetime issues. American vs. British?)
【讨论】:
【参考方案3】:不要使用 between,并设置不同的日期格式:
@begdt = '20170101'
@enddt = '20170131'
WHERE column1 >= @begdt AND column2 < @enddt
这将解决您的日期时间问题
【讨论】:
以上是关于SQL Server:BETWEEN DATES 将记录带出期间的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode --- 1360. Number of Days Between Two Dates 解题报告
BETWEEN Two Dates 返回相同两个日期的行,而不是返回之间的行