【问题标题】:Order date by day of the week按星期几的订单日期
【发布时间】:2015-10-30 17:35:55
【问题描述】:

我是一名 SQL 菜鸟,正在尝试弄清楚如何在列中显示日期作为日期,然后按星期几排序(即星期一 > 星期二 > 星期三 > 等...)

将第一部分向下(显示为日期),但是当我按“DAY”列排序时,它似乎按字母顺序排列(即星期一 > 星期五 > 星期六 > 等...)

这是我的查询:

SELECT last_name, hire_date, TO_CHAR(hire_date, 'DAY') AS Day
FROM employees
ORDER BY Day

任何意见将不胜感激:)

【问题讨论】:

  • 使用ctrl-K 将文本格式化为code 或在每行的开头添加4 个空格。
  • 使用order by hire_date
  • 请用您正在使用的数据库标记您的问题。
  • @GordonLinoff 我认为他标记 iSQL 不确定那是什么
  • 抱歉,现已更新(Oracel SQL*Plus)

标签: sql oracle date sql-order-by


【解决方案1】:

您可以使用to_char(<date>, 'd') 表示星期几:

SELECT last_name, hire_date, TO_CHAR(hire_date, 'DAY') AS Day
FROM employees
ORDER BY TO_CHAR(hire_date, 'D');

可能需要进行一些额外的操作才能获得正确的第一天,因为这取决于国际化设置。

【讨论】:

  • 谢谢,辛苦了。没有意识到我可以通过关键字的顺序应用字符转换,很高兴知道。
【解决方案2】:

正如 vkp 所说,您可能想要

SELECT last_name, hire_date, TO_CHAR(hire_date, 'DAY') AS Day
FROM employees
ORDER BY hire_date

这将显示像

这样的日子
1/10/2015   thursday
2/10/2015   friday
...
30/10/2015  friday

但如果您想按星期几而不是按字母顺序排序,则需要使用不同的日期函数,具体取决于您的数据库

sql server 你有日期部分

 select datename(dw,getdate()) --Friday       
 select datepart(dw,getdate()) --6

甲骨文你有

select to_char(hire_date, 'D') from dual;

所以order by to_char(hire_date, 'D')会给你

05/10/2015   monday
12/10/2015   monday
19/10/2015   monday
26/10/2015   monday
06/10/2015   tuesday
13/10/2015   tuesday
20/10/2015   tuesday
27/10/2015   tuesday

【讨论】:

  • 感谢您的回复。是的,我想按照您的第二个示例中的说明进行订购。我按照建议尝试了“datepart”的顺序,但似乎没有用,可能不是 Oracle 兼容的功能?
  • 是的。我在不知道您的 rdbms 时写了那个,现在我编辑答案以包含一个 oracle 函数。
  • 谢谢。在未来的问题中将更具体地介绍 woth 数据库类型!
  • 没问题。您可以在此处阅读以获取有关如何提出更好问题的提示。 How to askHow to create a Minimal, Complete, and Verifiable example.。例如,我回答了两个问题,因为不确定你在问什么。所以一些样本数据也有很大帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 2015-05-13
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多