在我的数据库中,有一个yyyymmdd格式的日期字段。 我必须以dd-mm-yyyy的格式获取该特定日期的所有日期。
前:
Date
20170130
20170228
20170325
对于上述日期,我需要以下格式的输出以及特定日期的日期和日期
date day
30-01-2017 tuesday
28-02-2017 tuesday
25-03-2017 saturday
答案 0 :(得分:1)
如果列是一个字符串,那么它可以保存无效的日期值,例如February 31
,一种方法可以避免这种情况,例如:
create or replace
function my_to_date( p_str in varchar2 ) return date
is
begin
return to_date( p_str );
exception
when others then
return null;
end;
\\
select to_char(my_to_date('20170231'),'DD-MM-YYYY Day')
from dual
\\
答案 1 :(得分:0)
听起来您的日期实际上不是DATE
字段,而是某种CHAR
字段?最好的选择是转换为DATE
,然后转换回CHAR
:
SELECT TO_CHAR(TO_DATE(mydate, 'YYYYMMDD'), 'DD-MM-YYYY Day')
FROM mytable;
这使用YYYYMMDD
掩码将您的字符串转换为日期,然后使用掩码DD-MM-YYYY Day
将其转换回字符串。如果您希望日期名称为小写(如在OP中),请使用day
。
答案 2 :(得分:0)
@ user2778168回答会给你想要的结果。但为什么呢?
您的数据库没有以 yyyymmdd格式或任何其他日期格式存储的日期,除非它是使用字符类型定义定义的。 Oracle将所有日期存储在单个内部结构中,并且只有轻微的变化时间戳是相同的。使用的格式仅告知Oracle如何显示值或将字符串转换为日期。除非指定了特定格式,否则Oracle使用NLS_DATE_FORMAT进行此确定。有关格式规范,请参阅here并向下扫描到“日期时间格式模型”。
要查看此内容,请执行以下操作:
select value
from nls_session_parameters
where parameter = 'NLS_DATE_FORMAT';
Select yrdate default_format
, to_char(yrdate, 'dd-mm-yyyy') specified_format
, dump(yrdate) unformated
from yrtable;
alter session set nls_date_format = 'Month dd,yyyy';
Rerun the above queries.
答案 3 :(得分:0)
您似乎以字符格式保存日期列(date1
)。假设您有一个名为days
的表:
SQL> desc days
date1 varchar2(10)
然后,
我们应该将它转换为日期,然后转换为char格式,并在引号中使用别名来提供您想要的小写别名。
也许您的数据库的日期语言与我的非英语(turkish
)非英语,然后您需要将其转换为english
。
最后,从您的输出中看,它适合根据转换日期对结果进行排序。所以我们可以使用以下SQL:
select to_char(to_date(date1,'yyyymmdd'),'dd-mm-yyyy') "date",
to_char(to_date(date1,'yyyymmdd'),'day','nls_date_language=english') "day"
from days
order by to_date(date1,'yyyymmdd');
答案 4 :(得分:-1)
尝试以下:
从yrtable选择to_char(yrdate,' dd-mm-yyyy'),to_char(yrdate,' D')