SQL Server:在日期之间带来记录

问题描述:

我正在使用应用程序(EHR系统),并需要在SSRS记录中的特定日期范围内记录。在脚本中,我格式化日期变量并应用于列。SQL Server:在日期之间带来记录

Convert(varchar(10), @begdt, 101) + ' 00:00:00' and 
Convert(varchar(10), @enddt, 101) + ' 23:59:59' 

如果我设置开始和结束日期2017年1月1日和2017年1月31日,然后将其拉了与2017年2月1日相关的记录。谁能帮我这个?

+1

为什么照顾你将'datetime'转换为字符串进行比较? [不良习惯踢:错误处理日期/范围查询 - 亚伦伯特兰](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date- range-queries.aspx) [与'魔鬼之间有什么共同点? - 亚伦伯特兰](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx) – SqlZim

不要将日期转换为字符串。当您这样做时,您允许SQL Server按字母顺序比较它们,而不是按实际日期顺序进行比较。

也许你有语言冲突(美国vs英国),SQL Server实际上将该日期视为1月2日。 这篇文章提供了对语言和日期信息:(SQL Server Datetime issues. American vs. British?

不要使用之间,并设置您的日期格式不同:

@begdt = '20170101' 
@enddt = '20170131' 

WHERE column1 >= @begdt AND column2 < @enddt 

这将需要你的日期时间问题