SQL 查询关于以星期二开始的日期名称的排序日期的查询是什么?

What will be the SQL query for ordering dates with respect to day name starting with tuesday?

它应该按工作日名称排序,即星期二在前,星期三在后,依此类推。

这是我所做的:

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

但是从星期二开始没有开始订购...

嗯。 . .您可以将工作日放在一起并通过包括工作日编号来排序:

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

如果您正在寻找适用于国际的解决方案,请不要使用 TO_CHAR,因为天数取决于 NLS_TERRITORY 设置,不同的 users/databases 设置会有所不同世界。对于欧洲大部分地区,星期一将是一周的第一天;对于美洲和非洲的大部分地区,星期日是一周的第一天;对于中东,星期六是一周的第一天;在孟加拉国,星期五是一周的第一天。 db<>fiddle

如果您想要一种独立于任何 NLS 设置的方法,请使用 ISO 周数:

这会将它排序为星期一第一,星期二第二,...

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