如何以“dd/mm/yyyy”格式调整日期
Posted
技术标签:
【中文标题】如何以“dd/mm/yyyy”格式调整日期【英文标题】:How to adjust dates in the format "dd/mm/yyyy" 【发布时间】:2019-07-02 04:41:52 【问题描述】:我正在尝试将日期从“dd/mm/yyyy”调整为“dd-mm-yy”,但没有成功。 在我的数据集中我有不同的日期格式,所以我会过滤掉它们以正确更正
例子:
DATES
-------
09-MAY-18
09-NOV-18
09-OCT-18
1/2/2017
1/3/2017
05/03/2018
12-OCT-18
因此,日期“2017 年 1 月 2 日”、“2017 年 1 月 3 日”、“05/03/2018”的格式应为“DD-MM-YYYY”,即“09-MAY-18”或“09-NOV-18”。
我尝试运行的公式是:
UPDATE TESTE_DATAS SET DATAS = TO_DATE(REGEXP_REPLACE(DATAS, '^\d+\/\d+\/\d+$',
CONCAT(
CONCAT(
CONCAT(
CONCAT(
REGEXP_SUBSTR(DATAS, '^(\d+)(\/)(\d+)(\/)(\d+)$', 1, 1, 'i', 1),
'-'),
REGEXP_SUBSTR(DATAS, '^(\d+)(\/)(\d+)(\/)(\d+)$', 1, 1, 'i', 3)),
'-'),
REGEXP_SUBSTR(DATAS, '^(\d+)(\/)(\d+)(\/)(\d+)$', 1, 1, 'i', 5))
),'DD-MM-YY') WHERE REGEXP_LIKE(DATAS,'^\d+\/\d+\/\d+$');
最后我得到了以下结果:
Error report -
SQL Error: ORA-01843: not a valid month
01843. 00000 - "not a valid month"
*Cause:
*Action:
预期的结果应该是:
DATES
-------
09-MAY-18
09-NOV-18
09-OCT-18
01-FEB-17
01-MAR-17
05-MAR-18
12-OCT-18
【问题讨论】:
你列的数据类型是date还是varchar2? 你使用的是什么版本的数据库? 【参考方案1】:您可以先将字符串转换为TO_DATE
的日期,然后使用TO_CHAR
格式化日期:
update teste_datas set datas = to_char(to_date(datas, 'DD/MM/YYYY'), 'DD-MON-YY') where datas like '%/%/%';
【讨论】:
嗨@blhsing,我没有成功:Error at Command Line : 204 Column : 87
Error report -
SQL Error: ORA-00904: "DATES": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
日期列被命名为DATAS
,而不是DATES
,根据您的问题。修正拼写,它会起作用。【参考方案2】:
从示例数据来看,字符类型列dates
似乎存在三种不同类型的格式。
考虑下面的代码块。如果转换为'dd-MON-yy'
时出现格式异常,则由于长度不同,对其他模型的更新格式会有所不同
create table teste_datas( id int, dates varchar2(20),derived_date date);
insert all
into teste_datas(id,dates) values(1,'09-MAY-18')
into teste_datas(id,dates) values(2,'1/2/2017')
into teste_datas(id,dates) values(3,'05/03/2018')
select * from dual;
begin
for d in ( select id, trim(dates) as dates from teste_datas order by id )
loop
begin
update teste_datas
set derived_date = to_date(d.dates,'dd-MON-yy')
where id = d.id;
exception when others then
begin
if length(d.dates)<10 then
update teste_datas
set derived_date = to_date(d.dates,'mm/dd/yyyy')
where id = d.id;
else
update teste_datas
set derived_date = to_date(d.dates,'dd/mm/yyyy')
where id = d.id;
end if;
end;
end;
end loop;
end;
select * from teste_datas;
ID DATES DERIVED_DATE
--- ---------- ------------
1 09-MAY-18 09.05.2018
2 1/2/2017 02.01.2017
3 05/03/2018 05.03.2018
select to_char(derived_date,'dd-MON-yy') as derived_date from teste_datas;
DERIVED_DATE
------------
09-MAY-18
02-JAN-17
05-MAR-18
【讨论】:
以上是关于如何以“dd/mm/yyyy”格式调整日期的主要内容,如果未能解决你的问题,请参考以下文章
如何屏蔽 EditText 以显示 dd/mm/yyyy 日期格式
如何以 HTML5 输入类型日期格式(dd/mm/yyyy)显示猫鼬日期,
通过laravel Eloquent Model以dd / mm / yyyy插入日期格式