在PLSQL中标识日期格式
我正在尝试编写一个plsql存储过程,它标识任何日期格式并将其转换为单一日期时间格式在PLSQL中标识日期格式,sql,plsql,Sql,Plsql,我正在尝试编写一个plsql存储过程,它标识任何日期格式并将其转换为单一日期时间格式'mm/dd/yyyy hh:mi:ss'。我该怎么做呢。我试着使用case statment,但是有太多的日期组合,所以不可能为所有的日期组合编写case statment。 例如:1967年10月27日,1967年10月27日11:15:45,1967年10月27日,等等。 如何将所有这些转换为单一格式。 谢谢。简单地到_char()就可以了 select to_char(yourDateField,'mm/
'mm/dd/yyyy hh:mi:ss'
。我该怎么做呢。我试着使用case statment,但是有太多的日期组合,所以不可能为所有的日期组合编写case statment。
例如:1967年10月27日
,1967年10月27日11:15:45
,1967年10月27日
,等等。
如何将所有这些转换为单一格式。
谢谢。简单地到_char()
就可以了
select to_char(yourDateField,'mm/dd/yyyy hh:mi:ss') from dual;
只需将转换为\u char()
即可
select to_char(yourDateField,'mm/dd/yyyy hh:mi:ss') from dual;
最理想的方法是将日期格式化为您需要的格式。然后做你需要的任何计算 否则,您将不得不编写大量的
select case
s来定义格式。更不用说它毫无意义,因为日期可以有很多不同的格式……正如Mat
所提到的。此外,Date
是一个受系统影响的组件
您可以尝试以下方法:
使用To_date()
将日期输入转换为所需格式,因为您可能甚至不知道此输入是字符串还是真实日期。因此,您可能需要一些验证,以确保这是一个正确的日期
SELECT TO_DATE(mydate,'mm/dd/yyyy hh:mi:ss') FROM Dual;
最理想的方法是将日期格式化为您需要的格式。然后做你需要的任何计算
否则,您将不得不编写大量的select case
s来定义格式。更不用说它毫无意义,因为日期可以有很多不同的格式……正如Mat
所提到的。此外,Date
是一个受系统影响的组件
您可以尝试以下方法:
使用To_date()
将日期输入转换为所需格式,因为您可能甚至不知道此输入是字符串还是真实日期。因此,您可能需要一些验证,以确保这是一个正确的日期
SELECT TO_DATE(mydate,'mm/dd/yyyy hh:mi:ss') FROM Dual;
也许这可以帮助你:
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
也许这可以帮助你:
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/02/01
作为输入,该怎么办。那是1月2日还是2月1日?如果你仔细想想,你会发现你根本无法做到。如果您将2013/02/01
作为输入,该怎么办。那是一月二号还是二月一号?