SQL BETWEEN未返回预期结果

时间:2020-07-01 03:59:47

标签: sql-server

我有一个带有几个表的SQL Server数据库。名为Packages的表具有名为DateIn的列。

这是我正在执行的SQL语句:

SELECT * 
FROM [dbo].[Packages] 
WHERE DateIn BETWEEN '01-06-2020' AND '01-07-2020'

我希望所有在2020年6月1日至7月1日之间具有DateIn的软件包。表中有2个示例软件包:其中一个DateIn值为'21 -06 -2020”和其他“ 27-06-2020”。

如果我将查询更改为此,则可以工作并返回两个包:

SELECT * 
FROM [dbo].[Packages] 
WHERE DateIn BETWEEN '01-06-2020' AND '30-06-2020'

在这种情况下,您可以看到日值介于01到30之间。我正在以dd-mm-yyyy格式保存日期。

DateIn的数据类型为nvarchar(50),而不是date,因为应用程序在必要时将其设置为“ N / A”。

我认为问题可能在于数据类型是nvarchar(50)而不是date,但由于上述原因,我不能使用它。有什么办法可以保留nvarchar(50)的地方吗?

1 个答案:

答案 0 :(得分:1)

在Alex的回答之外,如果您能够将其设置为Date值,请注意BETWEEN可能会产生某些无法预料的后果。亚伦·伯特兰(Aaron Bertrand)在https://sqlblog.org/2011/10/19/what-do-between-and-the-devil-have-in-common

在您的示例中,使用30-06-2020作为Between之间的结束日期可能会导致SQL忽略整天的数据。