关于Oracle中to_date的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Oracle中to_date的用法相关的知识,希望对你有一定的参考价值。

SELECT TO_CHAR(SYSTIMESTAMP,'YY-MON-DD HH:MI:SS.FF9 AM') FROM DUAL可以
为什么反过来to_date不行
SELECT TO_DATE('14-9月 -03 02:25:55.340472000 下午','YY-MON-DD HH:MI:SS.FF9 AM') FROM DUAL
应该怎么写

一、在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。
select to_date(\'2005-01-01 13:14:20\',\'yyyy-MM-dd HH24:mm:ss\') from dual;

如:
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。
select to_date(\'2005-01-01 13:14:20\',\'yyyy-MM-dd HH24:mi:ss\') from dual;

二、另要以24小时的形式显示出来要用HH24
select to_char(sysdate,\'yyyy-MM-dd HH24:mi:ss\') from dual;//mi是分钟
select to_char(sysdate,\'yyyy-MM-dd HH24:mm:ss\') from dual;//mm会显示月份 oracle中的to_date参数含义
1.日期格式参数 含义说明
D 一周中的星期几
DAY 天的名字,使用空格填充到9个字符
DD 月中的第几天
DDD 年中的第几天
DY 天的简写名
IW ISO标准的年中的第几周
IYYY ISO标准的四位年份
YYYY 四位年份
YYY,YY,Y 年份的最后三位,两位,一位
HH 小时,按12小时计
HH24 小时,按24小时计
MI 分
SS 秒
MM 月
Mon 月份的简写
Month 月份的全名
W 该月的第几个星期
WW 年中的第几个星期 1.日期时间间隔操作
当前时间减去7分钟的时间
select sysdate,sysdate - interval ’7’ MINUTE from dual
当前时间减去7小时的时间
select sysdate - interval ’7’ hour from dual
当前时间减去7天的时间
select sysdate - interval ’7’ day from dual
当前时间减去7月的时间
select sysdate,sysdate - interval ’7’ month from dual
当前时间减去7年的时间
select sysdate,sysdate - interval ’7’ year from dual
时间间隔乘以一个数字
select sysdate,sysdate - 8 *interval ’2’ hour from dual
2.日期到字符操作
select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from dual select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual

参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
3. 字符到日期操作
select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual

具体用法和上面的to_char差不多。
4. trunk/ ROUND函数的使用
select trunc(sysdate ,’YEAR’) from dual select trunc(sysdate ) from dual select to_char(trunc(sysdate ,’YYYY’),’YYYY’) from dual

5.oracle有毫秒级的数据类型
--返回当前时间 年月日小时分秒毫秒
select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual;
--返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)
select to_char(current_timestamp(9),’MI:SSxFF’) from dual;
6.计算程序运行的时间(ms)
declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for I in 1 .. 1000
loop
open l_rc for
’select object_name from all_objects ’||
’where object_id = ’ || i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line(round( (dbms_utility.get_time-l_start)/100, 2 ) ||’ seconds...’ );
end;
参考技术A 存入数据数据库之前利用转换函数将字符串转换成date型是需要的,不过感觉你的写法是有问题的,Time字符串是需要用单引号括起来的;
个人推荐写SQL语句的时候不要使用这种拼接字符串将参数值拼接到语句中去的方式,建议使用“?”挖坑然后预处理对象填坑的方式,看起来美观也不容易出错,比如http://www.cnblogs.com/lee/archive/2007/08/25/869656.html。希望我的回答能帮助到你
参考技术B SELECT TO_timestamp('14-9月 -03 03:29:34.864545000 下午','YY-Mon-DD HH:MI:SS.FF9 AM') FROM DUAL ; 参考技术C to_date 改成
TO_timestamp本回答被提问者采纳

oracle todate函数

就是在Oracle中我想把例如日期字符串“02.05.10”转换成“02-05-10”的Date格式,怎么完成?求教

1、你这个02.05.10 哪个是年,哪个是月,哪个是日?

2、date就一种格式,你看到的比如2014-01-01这种都只是date的一个显示方式

3、你要是想显示成你现在那样的

select replace(\'02.05.10\',\',\',\'-\') from dual追问

02是年份,05是月份,10是日。我想要Date型的而且不想要年份前2位,只要“02-05-10”

追答

做不到,只能

select to_date(\'02.05.10\',\'yy.mm.dd\') from dual

或者再通过to_char进行转换,以达到显示固定格式的目的

参考技术A replace('.','-'),如果不行的话 需要把. 和- 转化成特殊字符 char(X) 参考技术B create table 表名(create_date date);

insert into 表名(create_date) values to_date('2010-10-22','yyyy-mm-dd');
commit;

date类型就是日期类型,插入的时候需要将字符的2010-10-22 转成date型就行追问

我不想要前两位,而且还要Date型

参考技术C 2010年2月5日吗? to_date('02.05.10','mm-dd-yy') 试试行不?追问

不行,他会把年份的前2位自动加上,我不想要前两位,而且还要Date型

以上是关于关于Oracle中to_date的用法的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的to_date函数

Oracle to_date()函数的用法

oracle中to_date详细用法示例(oracle日期格式转换)

oracle中to_date详细用法示例(oracle日期格式转换)

mybaties 和 oracle的to_date函数的问题

oracle(cast , to_char , to_date )用法