对于从星期二开始的日期名称的排序日期,sql查询将是什么?

xv8emn3q  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(329)

它应该按星期天的名称排序,即星期二先到,星期三后到,以此类推。
以下是我所做的:

SELECT hire_date, TO_CHAR(hire_date,'Day')
FROM employee
ORDER BY TO_CHAR(hire_date,'Day');

但从星期二开始就不点菜了。。。

kqhtkvqz

kqhtkvqz1#

如果你正在寻找一个国际通用的解决方案,那么不要使用 TO_CHAR 因为天数取决于 NLS_TERRITORY 对于世界各地的不同用户/数据库,设置将有所不同。对欧洲大部分地区来说,周一将是一周的第一天;对于大多数美洲和非洲国家来说,星期天是一周的第一天;对中东来说,星期六是一周的第一天;在孟加拉国,星期五是一周的第一天。db<>小提琴
如果希望方法独立于任何nls设置,请使用iso weeks:
这将命令它,使星期一是第一,星期二第二。。。

SELECT hire_date,
       TO_CHAR(hire_date, 'Day')
FROM   employee
ORDER BY
       TRUNC(hire_date) - TRUNC( hire_date, 'IW' ),
       hire_date

要先得到星期二,可以减去一天:

SELECT hire_date,
       TO_CHAR(hire_date, 'Day')
FROM   employee
ORDER BY
       TRUNC(hire_date - 1) - TRUNC(hire_date - 1, 'IW' ),
       hire_date
7hiiyaii

7hiiyaii2#

嗯。您可以将工作日放在一起,并通过包含工作日编号来进行排序:

SELECT hire_date, TO_CHAR(hire_date, 'Day')
FROM employee
ORDER BY TO_CHAR(hire_date, 'D'), hire_date

不幸的是,在大多数情况下,这将从周日或周一开始。您可以通过减去一天或两天来调整特定设置:

SELECT hire_date, TO_CHAR(hire_date, 'Day')
FROM employee
ORDER BY TO_CHAR(hire_date - interval '1' day, 'D'), hire_date

或者你可以明确地说:

SELECT hire_date, TO_CHAR(hire_date, 'Day')
FROM employee
ORDER BY TO_CHAR(hire_date - interval '1' day, 'D', 'NLS_TERRITORY = 'AMERICA'), hire_date

相关问题