CURRENT_TIMESTAMP 是否有可排序的('order by')替代方案

Tec*_*Joe 0 sql-server t-sql sql-server-2012

我正在寻找一种方法来查找填充了 CURRENT_TIMESTAMP 的列的可排序替代方案,我现在很困惑。

我有一个基于 Web 的表单,其中包含多个字段,包括一个隐藏在表单上的字段,该字段在提交表单时将 CURRENT_TIMESTAMP 写入数据库。

我面临的挑战是我想从这些表单创建报告(按月、周或年排序)并按时间戳排序但根据我在这里看到的内容排序是不可能的。

有没有替代方法可以用来实现我想要的结果?

Aar*_*and 5

我不知道你为什么想要ORDER BY CURRENT_TIMESTAMP。如果该表有一列在CURRENT_TIMESTAMP创建行时存储在其中,则您只需要说:

ORDER BY that_column_name;
Run Code Online (Sandbox Code Playgroud)

或者,如果您首先想要最新的:

ORDER BY that_column_name DESC;
Run Code Online (Sandbox Code Playgroud)

...换句话说,忘记列是如何填充的。

现在,如果评论是准确的,并且您实际上不太关心ordering而是担心filtering,那么也许您想要的是:

-- create a DATE variable based on today:

DECLARE @s DATE = CURRENT_TIMESTAMP;

-- convert it to the first of the month
-- (you can do this in the step above,
-- just separating it for clarity):

SET @s = DATEADD(DAY, 1-DAY(@s), @s);

-- use >= and < in a WHERE clause, and order by that column
-- (however this is just a coincidence, order by and filtering
-- are completely unrelated in this case:

SELECT [?] FROM dbo.[?]
  WHERE [datetime_column] >= @s
  AND [datetime_column] < DATEADD(MONTH, 1, @s)
  ORDER BY [datetime_column];
Run Code Online (Sandbox Code Playgroud)

这就是您不想使用 BETWEEN 的原因,以防有人以这种方式发送给您:

这就是为什么要使用内置日期函数和本机 DATE 类型而不是转换为字符串以从日期时间变量中修剪时间的原因:

以下是有关日期/范围查询中不良做法的一些一般信息:

  • https://sqlblog.org/2009/10/16/bad-habits-to-kick-mis-handling-date-range-queries (2认同)
  • 更重要的是,`ORDER BY` 永远不会改变返回的行数,它只能改变顺序。 (2认同)