我正在尝试编写一个标识任何日期格式的plsql存储过程,并将其转换为单个日期时间格式'mm/dd/yyyy hh:mi:ss'
。我该怎么做。我尝试使用案例陈述但是有太多的日期组合,因此无法为所有这些组合写出案例陈述。
例如:27-Oct-1967
,October 27 1967 11:15:45
,1967-OCT-27
等。
如何将所有这些转换为单一格式。
谢谢。
答案 0 :(得分:1)
只需to_char()
即可,
select to_char(yourDateField,'mm/dd/yyyy hh:mi:ss') from dual;
答案 1 :(得分:0)
最理想的方法是将日期格式化为您需要的格式。然后做你需要的任何计算。
否则你将不得不写出大量的select case
来定义格式。并不是说它没有意义,因为日期可以有许多不同的格式......正如Mat
提到的那样。此外,Date
是一个可能受system
影响的组件。
您可以尝试以下方法:
使用To_Date()
将日期输入转换为所需格式,因为您可能甚至不知道此输入是作为字符串还是实际日期。所以你可能需要一些验证来确保它是一个合适的日期。
SELECT TO_DATE(mydate,'mm/dd/yyyy hh:mi:ss') FROM Dual;
答案 2 :(得分:0)
也许这可以帮到你:
CREATE TABLE temp_date
AS
SELECT '1967-OCT-27' some_date
FROM dual
UNION
SELECT '27-Oct-1967' FROM dual
UNION
SELECT 'October 27 1967 11:15:45' FROM dual
/
Declare
CURSOR i_cur IS
Select some_date
From temp_date;
--
v_date1 Varchar2(30);
v_date2 Varchar2(30);
v_date3 Varchar2(30);
v_char Varchar2(30);
v_cnt Number:= 0;
Begin
For i_rec IN i_cur
Loop
v_cnt:= v_cnt + 1;
Begin
v_date1:= to_char(to_date(i_rec.some_date), 'MM/DD/YYYY hh24:mi:ss');
dbms_output.put_line(v_cnt||'.'||chr(9)||v_date1);
EXCEPTION
When Others Then
Begin
v_date2:= to_char(to_date(i_rec.some_date, 'MM/DD/YYYY hh24:mi:ss'), 'MM/DD/YYYY hh24:mi:ss');
dbms_output.put_line(v_cnt||'.'||chr(9)||v_date2);
EXCEPTION
When Others Then
Begin
v_date3:= to_char(to_date(i_rec.some_date, 'YYYY-MON-DD'), 'MM/DD/YYYY hh24:mi:ss');
dbms_output.put_line(v_cnt||'.'||chr(9)||v_date3);
EXCEPTION
When Others Then
-- Insert into Exceptions table (or any temp table) then convert... --
v_char:= i_rec.some_date;
dbms_output.put_line(v_cnt||'. '||chr(9)||i_rec.some_date||' : '||v_char);
End;
End;
End;
End Loop;
End;
/
1. 10/27/1967 00:00:00
2. 10/27/1967 00:00:00
3. 10/27/1967 11:15:45