0

我有一个像这样的查询(伪)语言。

SELECT * FROM TMP
(
SELECT 
NAME , 
Format([CREATE_DATE],"dd/mm/yyyy") AS CREATE_DATE
FROM 
TABLE 
)TMP
ORDER BY CREATE_DATE

CREATE_DATE 以 DD/MM/YY/HH/SS/MS 格式存储在数据库中。

自从我们转换为 DD/MM/YY 以来,内表已经丢失了时间戳。现在我有一堆同一日期的记录。

问题是,如果我们一次又一次地查询它并且我们说超过 5000 条记录,结果是否总是相同的?Order By 只是有许多相同日期的记录,因此我的问题。然而,真正的记录具有在第一次查询后被截断的时间戳。

我认为实际上提出这个问题是一种更简化的方式。假设我们有许多具有相同值的记录,并且我对相同的值执行 ORDER BY,SQL 会一直显示相同的结果吗?它是否在任何情况下都由 PRIMARY_IDN 安排以确保结果的顺序相同?

非常具体地说,我们遇到了与此类查询相关的问题,并在ORACLE中报告但在SQL中没有,这有什么意义吗?这可能是它在 ORACLE 中有点随机(我害怕使用这个词),而 SQL 不在这个特定的上下文中?我只是想了解。

4

1 回答 1

1

你可以这样做:

SELECT <columns that you want> FROM
(
SELECT 
NAME , 
Format([CREATE_DATE],"dd/mm/yyyy") AS CREATE_DATE, create_date as orig_createDate
FROM 
TABLE 
)TMP
ORDER BY orig_create_date

也就是说,只需从子查询中传入原始日期并将其用于排序。您不必将其包含在输出中。

您的最后一个问题是关于“稳定”的排序。也就是说,当行具有相同的值时,它们将按相同的顺序排序。答案是不。数据库通常不保证order by使用稳定的排序算法。所以他们的行可能有不同的顺序。

于 2013-06-10T20:27:04.623 回答