它应该按星期天的名称排序,即星期二先到,星期三后到,以此类推。以下是我所做的:
SELECT hire_date, TO_CHAR(hire_date,'Day') FROM employee ORDER BY TO_CHAR(hire_date,'Day');
但从星期二开始就不点菜了。。。
kqhtkvqz1#
如果你正在寻找一个国际通用的解决方案,那么不要使用 TO_CHAR 因为天数取决于 NLS_TERRITORY 对于世界各地的不同用户/数据库,设置将有所不同。对欧洲大部分地区来说,周一将是一周的第一天;对于大多数美洲和非洲国家来说,星期天是一周的第一天;对中东来说,星期六是一周的第一天;在孟加拉国,星期五是一周的第一天。db<>小提琴如果希望方法独立于任何nls设置,请使用iso weeks:这将命令它,使星期一是第一,星期二第二。。。
TO_CHAR
NLS_TERRITORY
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
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
2条答案
按热度按时间kqhtkvqz1#
如果你正在寻找一个国际通用的解决方案,那么不要使用
TO_CHAR
因为天数取决于NLS_TERRITORY
对于世界各地的不同用户/数据库,设置将有所不同。对欧洲大部分地区来说,周一将是一周的第一天;对于大多数美洲和非洲国家来说,星期天是一周的第一天;对中东来说,星期六是一周的第一天;在孟加拉国,星期五是一周的第一天。db<>小提琴如果希望方法独立于任何nls设置,请使用iso weeks:
这将命令它,使星期一是第一,星期二第二。。。
要先得到星期二,可以减去一天:
7hiiyaii2#
嗯。您可以将工作日放在一起,并通过包含工作日编号来进行排序:
不幸的是,在大多数情况下,这将从周日或周一开始。您可以通过减去一天或两天来调整特定设置:
或者你可以明确地说: