如何从日期中获取星期几的名称?

81

给定日期 03/09/1982,我们如何判断它是星期几。在这种情况下,它将是 Tue

是否可能在单个查询中完成?

3个回答

151
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

(请注意,这些查询使用 ANSI 日期文字,遵循 ISO-8601 日期标准,避免日期格式的歧义。)


5
请注意,上面代码示例中的“dd/mm/yyyy”格式并不典型,如果您想要的是美国日期格式,则通常的日期格式为“mm/dd/yyyy”。原始日期示例是在三月还是九月并不清楚。 - DWright
3
非典型的?@DWright,你一定是来自美国,从未参与过国际项目或听说过国际标准(ISO)。 - pablete
16
@pablete,我实际上在欧洲长大,了解日期格式的国际差异,也了解ISO标准。我发表这个评论的原因是因为OP明显使用了美国的日期格式,因为1982年3月9日是星期二,而1982年9月3日是星期五。OP说它是星期二,所以我们知道正在使用美国的日期格式。但是Zohaib正在使用“dd/mm/yyyy”的格式字符串,这可能会导致问题,如果OP使用Zohaib的格式字符串,因为它不是美国格式。所以我想提醒人们,特别是OP。 - DWright
1
称我为疯子吧,但我会添加并使用select to_char(date '1982-03-09', 'Day') day from dual;。不知道为什么人们如此热衷于大写字母,因为我们现在有语法高亮器了,而且在不使用等宽字体时,大写字母占用更多的空间。 - Superdooperhero
请注意,此操作似乎会在星期几的名称后添加尾随空格,使它们与最长的星期几名称(“WEDNESDAY”)一样长。因此,您将得到“SUNDAY ”而不是“SUNDAY”。在前面加上“fm”(“填充模式”)似乎可以解决这个问题:TO_CHAR(date '1982-03-09', 'fmDAY') - M. Justin

7
差不多迟了十年,但我认为有必要加强@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

-2

要在Oracle SQL中实现这个,我尝试了这样做并且它对我有效。

SELECT 
    START_DATE,
    CASE WHEN START_DAY = 7 THEN 'SUNDAY'
         WHEN START_DAY = 1 THEN 'MONDAY'
         WHEN START_DAY = 2 THEN 'TUESDAY'
         WHEN START_DAY = 3 THEN 'WEDNESDAY'
         WHEN START_DAY = 4 THEN 'THURSDAY'
         WHEN START_DAY = 5 THEN 'FRIDAY'
         WHEN START_DAY = 6 THEN 'SATURDAY'
    END DAY_NAME
FROM 
(SELECT 
    TO_CHAR(T.START_DATE, 'DY') START_DAY,
    TO_CHAR(T.START_DATE, 'MM/DD/YYYY') START_DATE
       
FROM 
    TABLE T )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接