Sql Oracle:按日期和id排序
我有以下声明Sql Oracle:按日期和id排序,sql,oracle,date,Sql,Oracle,Date,我有以下声明 Select * from ((Query A) union all (Query B) union all (Query C)) order by date,id 在所有查询中都有一个 select tochar(date,'dd/mm/yyyy'), id 我的输出应该先按日期排序,然后按id排序,但我的当前输出是例如 01/01/2012 05/03/2012 12/02/2012 它的排序是基于日期的前两位数字,那么我怎样才能按整个日期然后按id排序呢 我的日
Select * from
((Query A)
union all
(Query B)
union all
(Query C))
order by date,id
在所有查询中都有一个
select tochar(date,'dd/mm/yyyy'), id
我的输出应该先按日期排序,然后按id排序,但我的当前输出是例如
01/01/2012
05/03/2012
12/02/2012
它的排序是基于日期的前两位数字,那么我怎样才能按整个日期然后按id排序呢
我的日期是日期,id是varchar。您的问题是您订购的是
字符串而不是日期,因为您将所有日期列都转换为字符。使用:
order by to_date(date, 'dd/mm/yyyy'), id
工会需要把他们看作是一个单独的表格,然后再做另一个。
如果列名称在联合中不同,只需使用别名重命名它们
尝试以下sql:
SELECT * FROM
(
SELECT
[id]
,[date]
FROM
[TabellaA]
UNION ALL
SELECT
[id]
,[date]
FROM
[TabellaB]
)
AS TAB_OUTPUT
ORDER BY date,id
(顺便说一句,你是在使用Oracle还是MySQL?不清楚…)如果date
是date
列,那么它的Oracle无法标记Oracle,将其转换为date
使用to_date()
没有任何意义。只要使用orderbydate
(因为ps4one在列上使用to_char()
,所以很可能该列确实是date
)类型,因为我记得to_char将对象转换为varchar2。因为ps4one在每个查询联合中都使用它,所以将列返回为varchar2。但是为什么要将日期
转换为varchar2
,并将其转换回日期
?可能是因为打印输出。他还可以在主选择中使用字符,而不是在子查询中转换,然后按日期排序。order by
中的值不用于“打印输出”。即使如此,将date
转换为varchar
,然后再将其转换回date
,然后再转换回“打印输出”上的字符表示也是没有意义的