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
它应该按工作日名称排序,即星期二在前,星期三在后,依此类推。
这是我所做的:
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