我有一个带有几个表的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)
的地方吗?
答案 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忽略整天的数据。