Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle:按日期和id排序_Sql_Oracle_Date - Fatal编程技术网

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
,然后再转换回“打印输出”上的字符表示也是没有意义的