Tec*_*Joe 0 sql-server t-sql sql-server-2012
我正在寻找一种方法来查找填充了 CURRENT_TIMESTAMP 的列的可排序替代方案,我现在很困惑。
我有一个基于 Web 的表单,其中包含多个字段,包括一个隐藏在表单上的字段,该字段在提交表单时将 CURRENT_TIMESTAMP 写入数据库。
我面临的挑战是我想从这些表单创建报告(按月、周或年排序)并按时间戳排序,但根据我在这里看到的内容,排序是不可能的。
有没有替代方法可以用来实现我想要的结果?
我不知道你为什么想要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 类型而不是转换为字符串以从日期时间变量中修剪时间的原因:
以下是有关日期/范围查询中不良做法的一些一般信息:
| 归档时间: |
|
| 查看次数: |
2060 次 |
| 最近记录: |