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 返回相同两个日期的行,而不是返回之间的行

sql server BETWEEN and

SQL Server 2008 BETWEEN 函数

SQL Server 索引如何帮助将 BETWEEN 用于给定查询

SQL Server 中的“BETWEEN”函数是不是非常昂贵?