【问题标题】:What will be the SQL query for ordering dates with respect to day name starting with tuesday?关于从星期二开始的日期名称排序日期的 SQL 查询将是什么?
【发布时间】:2020-05-31 17:02:45
【问题描述】:

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

这是我所做的:

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

但它不会从星期二开始订购...

【问题讨论】:

  • 请提供样本数据和期望的结果。 “从星期二开始”是什么意思?
  • 必须按工作日名称排序。所以星期二先到,然后是星期三,反之亦然。
  • 如果您按工作日 names 订购,为什么星期二先到?首先是星期五,然后是星期一,然后是星期六,等等。您可能还有其他意思,但不清楚是什么。

标签: sql oracle oracle-apex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 你能解释一下你使用的区间关键字吗?
    • NLS_DATE_LANGUAGE 对查询没有影响。 db<>fiddle 它基于 NLS_TERRITORY 设置,您不能将其作为参数传递给 TO_CHAR,因此这在国际设置中将无法成为一致的解决方案。
    • @MT0 。 . .谢谢。
    • 正如我在上一条评论中所说,您不能将NLS_TERRITORY 传递给TO_CHAR,因此您对“您可以是明确的”查询的编辑将失败并显示ORA-12702: invalid NLS parameter string used in SQL functiondb<>fiddle。跨度>
    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多