SQL按创建记录的日期选择记录顺序

时间:2012-01-11 06:56:36

标签: sql sql-server sql-server-2005

我有一个在SQL Server 2005上运行的Legacy系统。

当前表只有日期列YYYYMMDD,它缺少正在运行的序列号和时间。

是否可以按时间顺序选择表格和顺序?换句话说,根据记录的创建日期和时间对记录的返回结果进行排序。

2 个答案:

答案 0 :(得分:1)

如果您没有任何有效的时间信息或其他信息 - 例如未修改的矢量自动编号(IDENTITY) - 那么一般答案是

<强> BUT

魔鬼在细节中 - 它取决于你使用的数据库引擎。

答案 1 :(得分:0)

这样可以帮助其他人。 (我意识到OP提到了MSSQL 2005)

在SQL 2008及更高版本中,您可以使用%%physloc%%虚拟列。这是未记录的,不受支持。但是,事实证明它在很多情况下都很有用。

%%physloc%%中的十六进制值不仅表示文件编号和页码;他们还指定页面中的插槽号。但是,编码并不是人类可读的。

以下函数可用于理解此虚拟列中的值。

<强> 1。 sys.fn_PhysLocFormatter函数

此函数将%%physloc%%返回的十六进制值转换为一种很好的人类可读格式。您可以像这样使用它:

SELECT *,sys.fn_PhysLocFormatter(%%physloc%%) AS PLF
  FROM dbo.tst AS T
ORDER BY PLF;

此函数的输出格式为(FileNumber:PageNumber:SlotNumer)。以下是上述查询的输出:

sys.fn_PhysLocFormatter

<强> 2。 sys.fn_PhysLocCracker函数

这是一个表值函数,你必须使用CROSS APPLY语句在查询中调用它:

SELECT * FROM dbo.tst AS T
CROSS APPLY sys.fn_PhysLocCracker(%%physloc%%) AS FPLC
ORDER BY FPLC.file_id, FPLC.page_id, FPLC.slot_id;

它返回三列:file_idpage_idslot_id。与前面示例中看到的相同的表一起使用,输出如下所示:

sys.fn_PhysLocCracker

参考文献:

Where are my Rows? – Using the %%physloc%% Virtual Column

SQL Server - Find Physical Location of Records

SQL Server 2008: New (undocumented) physical row locator function