sql datepart mmm yy未按时间顺序排序

lyr7nygr  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(347)

我无法使用日期部分对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
w80xi6nr

w80xi6nr1#

在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')
dsekswqp

dsekswqp2#

一种方法是:

order by year, 
         (case month when 'Jan' then 1 when 'Feb' then 2 . . . end)

根据您的数据库,可能有更简单的方法来表达这一点。

eivgtgni

eivgtgni3#

它是一个将日期转换为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');

db<>小提琴
像@gmb一样,我已经指定了月份缩写的语言。

相关问题