我有一个像这样的查询(伪)语言。
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格式存储在DB中。
由于我们正在转换为DD / MM / YY,因此内部表已经丢失了时间戳。 现在,我有一堆同一日期的记录。
问题是,如果我们一次又一次地查询这个结果,结果总是相同的,我们说的超过5000条记录? Order By只有许多相同日期的记录,因此我的问题。然而,真实记录具有在第一次查询之后被截断的时间戳。
我认为可以实际问这个问题是一种更简化的方式。 我们有n个具有相同Value的记录,并且我在同一个值上执行ORDER BY,SQL会一直显示相同的结果吗?在任何情况下,它是否由PRIMARY_IDN安排以确保结果的顺序相同?
非常具体地说,我们遇到了与此类查询相关的问题并在 ORACLE 中报告但未在 SQL 中报告,是否有任何重要意义?这可能是它在ORACLE中有点随机(我害怕使用这个词),而SQL不在这个特定的上下文中?我只是想了解。
答案 0 :(得分: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
使用稳定的排序算法。所以他们的行可能会有不同的顺序。