我正在尝试在现有日期列旁边添加一列,该列提供星期几的相应名称。
SELECT DISTINCT
a.transaction_date,
to_char(date 'a.transaction_date','DAY') as Day
FROM transactions_table a
正在尝试:星期一,星期二,星期三等。可悲的是,数据库正在返回ORA-01841错误。通常,我的日期列返回的日期是这样的:dd-mmm-yy
答案 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
(以及缩写为DY
或Dy
,这可能是您真正想要的)输出取决于您的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)
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