如何从日期获取工作日名称?

use*_*901 61 oracle date dayofweek

鉴于03/09/1982我们怎么能说这是哪个工作日.在这种情况下它将是Tue.

是否可以获得单个查询?

Zoh*_*aib 117

SQL> SELECT TO_CHAR(date '1982-03-09', 'DAY') day FROM dual;

DAY
---------
TUESDAY

SQL> SELECT TO_CHAR(date '1982-03-09', 'DY') day FROM dual;

DAY
---
TUE

SQL> SELECT TO_CHAR(date '1982-03-09', 'Dy') day FROM dual;

DAY
---
Tue
Run Code Online (Sandbox Code Playgroud)

(请注意,查询使用ANSI日期文字,遵循ISO-8601日期标准,避免日期格式模糊.)

  • @pablete,我实际上在欧洲长大,并且意识到日期格式的国际变化,并且也了解ISO标准.我发表评论的原因是OP明显使用美国日期格式,因为1982年3月9日是星期二,但1982年9月3日是星期五.OP表示这是星期二,因此我们知道正在使用美国日期格式.但是Zohaib正在使用'dd/mm/yyyy'格式字符串,因此如果OP使用Zohaib的格式字符串会导致潜在问题,因为它不是美国格式.因此,我想提醒人们,尤其是OP. (13认同)
  • 请注意,上面的代码示例中的"dd/mm/yyyy"是非典型的,如果您要使用的是美国日期格式.在美国,典型的日期格式为'mm/dd/yyyy'.尚不清楚原始日期示例是在3月还是9月. (3认同)
  • 不典型?@DWright你必须来自美国,从未参与国际项目或听过国际标准(ISO) (2认同)

wol*_*lφi 8

晚了将近十年,但我认为有必要增强@Zohaib 的答案,因为它的结果取决于客户的语言。如果您向用户显示星期几名称,那绝对没问题,但如果您的代码依赖于它,我宁愿像这样控制语言:

SQL> SELECT TO_CHAR(date '1982-03-09', 'DAY', 'NLS_DATE_LANGUAGE = ENGLISH') day FROM dual;

DAY
---------
TUESDAY

SQL> SELECT TO_CHAR(date '1982-03-09', 'DY', 'NLS_DATE_LANGUAGE = ENGLISH') day FROM dual;

DAY
---
TUE

SQL> SELECT TO_CHAR(date '1982-03-09', 'Dy', 'NLS_DATE_LANGUAGE = ENGLISH') day FROM dual;

DAY
---
Tue
Run Code Online (Sandbox Code Playgroud)