我无法使用我想要的月份年份格式的日期部分coz对mmm yy摘要进行排序
获得如下输出
Col1 Col2
AA Apr 19
BB Feb 20
CC Dec 19
DD May 19
EE Jan 20
如何在本月明智地进行排序
预期结果
Col1 Col2
AA Apr 19
DD May 19
CC Dec 19
EE Jan 20
BB Feb 20
答案 0 :(得分:2)
在Oracle中,您可以为此使用to_date()
:
select col1, col2
fro mytable
order by to_date(col2, 'mon yy')
请注意,Oracle根据NLS参数(例如NLS_DATE_LANGUAGE
)来解释月份名称。因此,要使其正常工作,数据库的语言必须是美国语言。
如果不是这种情况,您可以尝试将参数强制作为to_date()
的第三个参数:
to_date(col2, 'mon yy', 'NLS_DATE_LANGUAGE=American')
答案 1 :(得分:1)
一种方法是:
order by year,
(case month when 'Jan' then 1 when 'Feb' then 2 . . . end)
根据数据库的不同,可能有更简单的表达方式。
答案 2 :(得分:1)
这是一个将日期转换为mmm yy格式的查询
在工作数月时,您大概是按月汇总每日数据,并且目前正在做类似的事情:
select count(*) as col1,
to_char(your_column, 'Mon RR', 'NLS_DATE_LANGUAGE=ENGLISH') as col2
from your_table
group by to_char(your_column, 'Mon RR', 'NLS_DATE_LANGUAGE=ENGLISH')
order by col2;
按日期的字符串表示形式对数据进行排序。 (那不完全是您在示例中显示的内容,但是不确定您是否刚刚创建了它……)
如果您使用实际月份进行汇总,则可以通过截断日期值(给出该月的第一天)来进行分组,然后按该截断日期进行排序;并仅在最后一刻转换为字符串以供显示:
select count(*) as col1,
to_char(trunc(your_column, 'MM'), 'Mon RR', 'NLS_DATE_LANGUAGE=ENGLISH') as col2
from your_table
group by trunc(your_column, 'MM')
order by trunc(your_column, 'MM');
就像@GMB一样,我已经指定了月份缩写的语言。