如何从日期返回工作日名称

时间:2019-09-10 13:11:07

标签: sql oracle

我正在尝试在现有日期列旁边添加一列,该列提供星期几的相应名称。

SELECT DISTINCT
a.transaction_date,
to_char(date 'a.transaction_date','DAY') as Day
FROM transactions_table a

正在尝试:星期一,星期二,星期三等。可悲的是,数据库正在返回ORA-01841错误。通常,我的日期列返回的日期是这样的:dd-mmm-yy

5 个答案:

答案 0 :(得分:2)

您可以尝试Dy模式:

select to_char(transaction_date,'Dy') 
  from transactions_table

如果您需要其他语言,请考虑第三个参数:

select to_char(transaction_date,'Dy','nls_date_language=turkish')
  from transactions_table

P.S。我将英语作为第一个查询的默认语言,如果它不是您数据库的默认语言,请考虑将第二个查询用turkish替换为english

答案 1 :(得分:0)

尝试以下-

SELECT DISTINCT
a.transaction_date,
to_char(date a.transaction_date,'DAY') as Day
FROM transactions_table a

答案 2 :(得分:0)

我想transaction_date是日期数据类型...

SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DAY') as Day
FROM transactions_table a

如果是varchar2,则可以使用日期格式先将其转换为日期

SELECT DISTINCT
a.transaction_date,
to_char(to_date(a.transaction_date, 'dd/mm/yyyy'),'DAY') as Day
FROM transactions_table a

例如:

select to_char(to_date('08/09/2019', 'dd/mm/yyyy'),'DAY') as Day from dual;

答案 3 :(得分:0)

date 'a.transaction_date'试图将date literal与可变的列值混合使用,然后又将列名放在单引号内,您最终会做的很精妙:

to_date('a.transaction_date', 'YYYY-MM-DD')

出于更明确的原因,它也获得了ORA-01841。

如果transaction_date已经是一个日期,则只需参考该日期:

SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DAY') as Day
FROM transactions_table a

如果它是一个字符串-不应该这样! -然后将该值正确转换为日期:

SELECT DISTINCT
a.transaction_date,
to_char(to_date(a.transaction_date, 'YYYY-MM-DD'),'DAY') as Day
FROM transactions_table a

...或使用适当的格式掩码。

还请注意,DAY(以及缩写为DYDy,这可能是您真正想要的)输出取决于您的NLS日期语言,但是您可以覆盖它如果您希望始终使用英语,例如:

SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DY','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a

使用CTE进行快速演示:

-- CTE for dummy date
with transactions_table(transaction_date) as (
  select date '2019-01-01' from dual
  union all
  select date '2019-09-01' from dual
)
-- actual query
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'Dy','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a
/

TRANSACTIO DAY         
---------- ------------
2019-01-01 Tue         
2019-09-01 Sun         

答案 4 :(得分:0)

签出Format Models

SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date, 'DY') as Day_Abbr, -- This will print out an abbriviation like "MO" for Monday
to_char(a.transaction_date, 'DAY') as Day, -- This will print out a whole day, like "MONDAY"
substr(to_char(a.transaction_date, 'DAY'),1,3) as Day_My_Abbr -- This will print out your wanted abbriviation, like "MON"
FROM transactions_table a