Sql server 对数据类型为nvarchar和Date的日期列应用筛选器的差异

Sql server 对数据类型为nvarchar和Date的日期列应用筛选器的差异,sql-server,date,filter,format,Sql Server,Date,Filter,Format,我想准备一个示例,说明使用数据类型date(yyyy-mm-dd)和nvarchar对日期列进行过滤的区别。所以我的表中有两列都包含日期。2之间的区别在于1是日期格式,而另一个是nvarchar格式 +-------------+---------------------+ | Flight_Date | Flight_Date_Varchar | +-------------+---------------------+ | 2021-01-07 | 2021-01-07

我想准备一个示例,说明使用数据类型date
(yyyy-mm-dd)
nvarchar
对日期列进行过滤的区别。所以我的表中有两列都包含日期。2之间的区别在于1是日期格式,而另一个是
nvarchar
格式

+-------------+---------------------+
| Flight_Date | Flight_Date_Varchar |
+-------------+---------------------+
| 2021-01-07  | 2021-01-07          |
| 2021-01-07  | 2021-01-07          |
| 2021-01-07  | 2021-01-07          |
| 2021-01-07  | 2021-01-07          |
| 2021-01-07  | 2021-01-07          |
| 2021-01-07  | 2021-01-07          |
| 2021-01-07  | 2021-01-07          |
| 2021-02-07  | 2021-02-07          |
| 2021-02-08  | 2021-02-08          |
| 2021-02-09  | 2021-02-09          |
+-------------+---------------------+
我发现很难理解为什么我能够在列中有一列不是日期格式时按升序和降序对列进行排序。是否有一个示例显示当使用
nvarchar
列而不是日期列进行查询时,行为将如何改变


我还尝试在两列上应用日期过滤器,但我仍然能够在日期以
nvarchar
格式存储的列上应用过滤器。我正在寻找一个示例,演示在日期列和日期列上应用过滤器时过滤器的不同之处,其中日期存储在数据类型
nvarchar

@squirrel是正确的,如果使用
yyyy-mm-dd
格式,则order by将起作用,相反,如果将格式更改为
MM-DD-YYYY或DD-MM-YYYY
,则可以看到差异

DROP TABLE IF EXISTS #Tempdate
CREATE TABLE #Tempdate (Id int, Flight_Date DATE, Flight_Date_Varchar NVARCHAR(10))
INSERT INTO #Tempdate
VALUES
(1,'10-12-2013','10-12-2013'),
(2,'01-11-2013','01-11-2013'),
(3,'01-01-2014','01-01-2014'),
(4,'01-03-2014','01-03-2014')

SELECT * FROM #Tempdate ORDER BY Flight_Date DESC

SELECT * FROM #Tempdate ORDER BY Flight_Date_Varchar DESC



您正在以
YYYY-MM-DD
格式以
Flight\u date\u Varchar
存储日期。所以按它订购ASC或DESC仍然有效。尝试将日期存储在
MM-DD-YYYY
DD-MM-YYYY
中,并重复相同的排序测试。希望最后您能理解为什么使用正确的
数据类型来存储值很重要如果您将日期存储为字符串,那么最终会发生两件事。将存储一个非“预期”格式的值(例如1/7/21)。并且将存储一个非真实日期的值(0000-00-00)。像这样的问题被一次又一次地贴出来。选择适合属性域的数据类型;让数据库引擎强制执行自然特征。