我正在尝试编写一个 plsql 存储过程,它可以识别任何日期格式并将其转换为单个日期时间格式'mm/dd/yyyy hh:mi:ss'
。我该怎么做。我尝试使用 case 语句,但日期组合太多,无法为所有日期组合编写 case 语句。例如:27-Oct-1967
, October 27 1967 11:15:45
,1967-OCT-27
等。如何将所有这些转换为单一格式。谢谢你。
问问题
950 次
3 回答
1
简单to_char()
会做,
select to_char(yourDateField,'mm/dd/yyyy hh:mi:ss') from dual;
于 2013-01-01T11:02:21.687 回答
0
最理想的方法是将日期格式化为您需要的格式。然后做任何你需要的计算。
否则,您将不得不编写大量可笑的select case
s 来定义格式。并不是说这没有意义,因为日期可以有多种不同的格式……Mat
如前所述。此外,还有Date
一个组件可能会受到您的system
.
您可以尝试以下方法:
使用给定的日期输入转换为所需的格式To_Date()
,您甚至可能不知道此输入是作为字符串还是真实日期。因此,您可能需要进行一些验证以确保它是正确的日期。
SELECT TO_DATE(mydate,'mm/dd/yyyy hh:mi:ss') FROM Dual;
于 2013-01-01T11:20:48.250 回答
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
于 2013-01-02T15:27:48.877 回答