以dd / mm / yyyy格式获取所有日期。我有一个格式为yyyymmdd的日期字段

问题描述 投票:-1回答:5

在我的数据库中,有一个yyyymmdd格式的日期字段。我必须以dd-mm-yyyy的格式获取该特定日期的所有日期。

例如:

Date
20170130
20170228
20170325

对于上述日期,我需要以下格式的输出与特定日期的日期和日期

date                  day

30-01-2017            tuesday
28-02-2017            tuesday
25-03-2017            saturday
sql oracle plsql
5个回答
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
\\

Demo


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


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.

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');

D e m o


-1
投票

试试以下:

从yrtable中选择to_char(yrdate,'dd-mm-yyyy'),to_char(yrdate,'D')

© www.soinside.com 2019 - 2024. All rights reserved.