SQL Server日期列自动排序日期

时间:2016-01-16 10:58:47

标签: sql sql-server sorting date

我有一个带有日期列的表。我在C#中使用DateTimePicker在该列中插入日期。

一切正常。但是我想要在表格中插入日期。目前,当我将今天的日期添加到一行然后添加昨天的日期或任何过去的日期时,它会被添加到第二行ofc中。

我希望将其添加到第1行。在今天之前,按顺序制作所有日期。

我可以使用日期栏的任何属性来确保日期顺序吗?

2 个答案:

答案 0 :(得分:2)

SQL Server数据表中有绝对无隐式顺序!没有索引,没有聚集索引,没有技巧......一个简单的SELECT * FROM table可能会带有排序数据 - 或者不是......

如果您需要以特殊方式对数据进行排序,则必须添加ORDER BY

现在为您的问题提供一个解决方案:

在您的桌面上创建一个可更新的视图(https://msdn.microsoft.com/en-us/library/ms180800.aspx),您可以按照自己的意愿进行排序。比通过这种观点传播......

重要的是:即使您指定SELECT TOP 100 PERCENT * FROM YourTable ORDER BY YourColumn,VIEW也会带回排序数据......

这里的技巧是使用ROW_NUMBER()

引入排序

我参加了测试我的一张桌子。为了让它变得更加困难,我选了一个IDENTITY列。

请注意:唯一的确定顺序是最外面的ORDER BY

CREATE VIEW vwOneTableWithIdentityID
AS
SELECT ROW_NUMBER() OVER(ORDER BY SortColumn) AS OrderedInx
      ,* FROM OneTableWithIdentityID
GO

SELECT * FROM vwOneTableWithIdentityID;
GO

SET IDENTITY_INSERT OneTableWithIdentityID ON;
INSERT INTO vwOneTableWithIdentityID(OneTableWithIdentityIDID,AnotherID,SortColumn) VALUES(-5,1081,'aabc');
SET IDENTITY_INSERT OneTableWithIdentityID OFF;
GO

SELECT * FROM vwOneTableWithIdentityID
GO

DELETE FROM vwOneTableWithIdentityID WHERE OneTableWithIdentityIDID=-5;
GO

SELECT * FROM vwOneTableWithIdentityID;
GO

DROP VIEW vwOneTableWithIdentityID;

答案 1 :(得分:0)

记录的物理顺序取决于CLUSTER INDEX。 如果您希望DBMS在没有

的情况下在物理上订购数据
  ORDER BY

子句,在所需的字段上创建聚簇索引。