gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:45:23 28 4
gpt4 key购买 nike

在我的应用程序中尝试格式化和排序日期,我使用 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

最佳答案

听起来你想要类似的东西

SELECT to_char( your_date_column, your_format_mask )
FROM your_table
ORDER BY your_date_column

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.

如果添加 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.

关于sql - 如何在 Oracle 中格式化和排序日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093743/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com