如何在Oracle中格式化和排序日期?

Har*_*aji 11 oracle

在我的应用程序中我正在尝试格式化和排序日期,我使用to_char()函数将日期格式化为我所需的格式,但是当我对它们进行排序时,它将它排序为字符串排序.但我希望它们按日期排序.

我需要一些帮助才能在同一个查询中实现这两个目标.请帮助我.

我使用的查询是,

SELECT to_char( t1.your_date_column1, your_format_mask ) as alias,
  FROM your_table1 t1,your_table2
 ORDER BY t1.your_date_column1
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 15

这听起来像你想要的东西

SELECT to_char( your_date_column, your_format_mask )
  FROM your_table
 ORDER BY your_date_column
Run Code Online (Sandbox Code Playgroud)

SELECT列表中,您希望返回以首选格式表示日期的字符串.在该ORDER BY子句中,您希望按实际日期排序.例如,使用标准EMPDEPT表格

SQL> ed
Wrote file afiedt.buf

  1  select to_char( hiredate, 'DD-MM-YYYY' )
  2    from emp,
  3         dept
  4   where emp.deptno = dept.deptno
  5*  order by hiredate
SQL> /

TO_CHAR(HI
----------
17-12-1980
20-02-1981
22-02-1981
02-04-1981
01-05-1981
09-06-1981
08-09-1981
28-09-1981
17-11-1981
03-12-1981
03-12-1981
23-01-1982
19-04-1987
23-05-1987

14 rows selected.
Run Code Online (Sandbox Code Playgroud)

如果添加DISTINCT,问题是Oracle不知道您正在应用的函数(在本例中为TO_CHAR)提供从表中的数据到输出中的数据的一对一映射.例如,两个不同的日期(2010年10月1日10:15:15和2010年10月1日23:45:50)可能会生成相同的字符输出,迫使Oracle消除两个'01 -10-2010'字符串中的一个但这两个日期的排序方式不同.您可以通过嵌套查询并在执行之后DISTINCT和执行之前将字符串转换回日期来纠正该​​问题ORDER BY

SQL> ed
Wrote file afiedt.buf

  1  select hire_date_str
  2    from (
  3      select distinct to_char( hiredate, 'DD-MM-YYYY' ) hire_date_str
  4        from emp,
  5             dept
  6       where emp.deptno = dept.deptno
  7      )
  8*  order by to_date(hire_date_str,'DD-MM-YYYY')
SQL> /

HIRE_DATE_
----------
17-12-1980
20-02-1981
22-02-1981
02-04-1981
01-05-1981
09-06-1981
08-09-1981
28-09-1981
17-11-1981
03-12-1981
23-01-1982
19-04-1987
23-05-1987

13 rows selected.
Run Code Online (Sandbox Code Playgroud)