ORACLE中date类型字段的处理
在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月-03'
(2)转换字符串为日期
使用ORACLE内部函数to_date()
to_date()函数的参数是to_char()函数参数的反转。
to_date(string_value , date_format)
变量定义如下:
string_value :为字符串直接值(字符串本身)、字符串列(数据库中定义的某个表的某列)或某字符串内部函数的返回值。
date_format为合法的Oracle日期格式。
下列更新语句均符合ORACLE的日期格式,更新成功:
create table student (name varchar2(10) not null primary key , enrolldate date not null);//创建student表
insert into student values('mark',to_date('08-21-2003','MM-DD-YYYY'));
insert into student values('mark1',to_date('21-08-2003','DD-MM-YYYY'));
insert into student values('mark2','21-8月-2003');
insert into xiongxiaomin.student values('mark3','21-8月-03');
(3)转换日期为字符串
使用ORACLE内部函数to_char()
to_char(date_value,date_format)
变量定义如下:
date_value :为日期型直接值(日期本身)、日期型列值(数据库中定义的某个表的某列)或某内部函数的返回的日期型值。
date_format为合法的Oracle日期格式。
选择enrolldate字段的时间部分:
select (to_char(enrolldate,'HH24:MI:SS'))enrolldate from student;
(4)注意:ORACLE中的date数据类型定义的列包含日期和时间。
1、系统当前日期为2003年8月21日,之后执行下列语句
insert into student values('mark5',to_date('09:28:03','HH:MI:SS'));//注意此种在一条记录的date类型字段中插入时间的方法,系统默认的日期为系统当前日期所在月份的第一天,因此得到的记录为
Name enrolldate
mark5 01-八月 -2003 09:28:03 AM
2、修改系统当前日期为2003年7月21日,之后执行下列语句
insert into student values('mark6',to_date('09:28:03','HH:MI:SS'));
得到的记录为
Name enrolldate
mark6 01-七月 -2003 09:28:03 AM
insert into student values('mark8',to_date('20:28:03','HH24:MI:SS'));
3、同时在一条记录中插入日期和时间的方法
insert into student values('mark9',to_date('21-08-2003
20:28:03','DD-MM-YYYY HH24:MI:SS'));//同时在一条记录中插入日期和时间的方法
insert into student values('mark',to_date('21-08-2003
09:52:03','DD-MM-YYYY HH:MI:SS'));//同时在一条记录中插入日期和时间的方法
注意不能使用下列方法同时插入日期和时间
insert into student values('mark2','21-8月-2003'+to_date('
09:52:03','HH:MI:SS'));//无效插入记录方法
4、在SQL*Plus Worksheet中执行下列SQL语句
select * from student;
得到的记录结果如下:注意date类型字段中只显示了日期,时间并未显示
NAME ENROLLDATE
mark 18-8月 -03
mark1 21-8月 -03
mark2 21-8月 -03
已选择3行。
5、但在JSP程序中同样执行select * from student order by enrolldate
显示结果见下图(既显示了日期,又显示了时间)
JSP页面中的显示结果
6、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期和时间
NAME TO_CHAR(ENROLLDATE,'DD-MM-YYYYHH:MI:SS
mark 21-08-2003 12:00:00
mark1 21-08-2003 12:00:00
已选择2行
注意:5和6中的不同,时间到秒时,JSP页面中显示时多出了". 0"
7、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'DD-MM-YYYYHH24:MI:
mark 18-08-2003 17:40:20
mark1 21-08-2003 00:00:00
mark2 21-08-2003 00:00:00
已选择3行。
注意:6和7中的SELECT中的"HH:MI:SS"和"HH24:MI:SS"两者的不同是"HH"为小时制,值的范围为0-12;"HH24"为24小时制,值的范围为0-23。
看下列例子:
①insert into student values('南太里',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH24:MI:SS'));
ORACLE中的记录结果为:
NAME enrolldate
南太里 19-八月 -2003 01:54:05 PM
②insert into student values('南太里2',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH:MI:SS'));//插入错误
错误提示为:
insert into student values('南太里2',to_date('08-19-2003 13:54:05','MM-DD
*
ERROR 位于第 1 行:
ORA-01849: 小时值必须介于 1 和 12 之间
即应用"HH"时,不能应用"13:54:05",而应改为"01:54:05"
正确语句如下:
insert into student values('南太里2',to_date('08-19-2003
01:54:05','MM-DD-YYYY HH:MI:SS'));
ORACLE中的记录结果为:
NAME enrolldate
南太里2 19-八月 -2003 01:54:05 AM
注意上述两种方式得出的结果一种为PM,另一种为AM。
为了提高正确性,建议都是用地一种方式"HH24"
8、但在JSP程序中同样执行select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student
显示结果见下图。(其结果与在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student;相同)
9、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'month dd,yyyy HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'MONTHDD,YYYYHH24:MI:SS')
mark 8月 18,2003 17:40:20
mark1 8月 21,2003 00:00:00
mark2 8月 21,2003 00:00:00
已选择3行。
10、to_char()函数,'DD-MM-YYYY'格式及'MM-DD-YYYY'格式和'month dd,yyyy'格式的不同
'DD-MM-YYYY'格式:21-08-2003
'month dd,yyyy'格式:8月 21,2003
11、注意:在日期和时间格式中非常容易混淆的是月份和秒的格式(即MM和MI)
在SQLPlus*Worksheet中执行下列语句,不报错。
insert into student values('王嘉',to_date('08:05','HH24:MM'));//08被认为是小时,05被认为是月份。
commit;
在表编辑器中查看:实际插入值为
NAME ENROLLDATE
王嘉 01-五月 -2003 08:00:00 AM
select name,to_char(enrolldate,'DD-MM-YYYY HH24:MI:SS')enrolldate from
student where name='王嘉';
NAME ENROLLDATE
王嘉 01-05-2003 08:00:00
已选择 1 行。
insert into student values('汪嘉2',to_date('08-19-2003
13:54:05','MM-DD-YYYY HH24:MI:SS'));
12、使用Oracle的date数据类型的另一个优点是:它支持日期的运算。可以对已经存在的
日期加上或减去若干天,例如:
insert into student values('熊',sysdate+7);
原文出处:http://www.cnblogs.com/chuncn/archive/2009/01/29/1381281.html
ORACLE中date类型字段的处理的更多相关文章
- ORACLE插入DATE类型字段
1 怎样在ORACLE中输入DATE类型的字段 insert into table_name (date_column) values(to_date('2006-06-04','yyyy-mm-dd ...
- .Net处理Oracle中Clob类型字段总结
最近在做项目中用到Clob这个字段,Clob是存储无限长字符的Oracle字段,用的时候网上找资料找了好久,内容不是很多,大部分都不能用,当然也有可以用的,测试了不同版本,整理了一下,给大家在做项目的 ...
- 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题
今天在做项目过程中,查询一个表中数据时总碰到这个问题: java.sql.SQLException:Value '0000-00-00' can not be represented as ...
- Oracle中varchar2类型字段长度限制使用问题
为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...
- (转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上
原文摘自:http://heisetoufa.iteye.com/blog/ '模块代码 Private Declare Function CreateStreamOnHGlobal Lib &quo ...
- Oracle 中DATE类型的计算
select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) f ...
- oracle中日期类型 to_date 和to_timestamp什么区别啊?
1.to_date() 和to_timestamp()区别 由于oracle中date类型只支持到秒,不支持到毫秒,所以to_date()不能取到毫秒.如果要取到毫秒,oracle 9i以上版本,可以 ...
- 【java】jackson 中JsonFormat date类型字段的使用
为了便于date类型字段的序列化和反序列化,需要在数据结构的date类型的字段上用JsonFormat注解进行注解具体格式如下 @JsonFormat(pattern = "yyyy-MM- ...
- jackson 中JsonFormat date类型字段的使用
为了便于date类型字段的序列化和反序列化,需要在数据结构的date类型的字段上用JsonFormat注解进行注解具体格式如下 @JsonFormat(pattern = "yyyy-MM- ...
随机推荐
- 展开BOM并使用最终用量的算法(转载)
本文系转载子ITPUB,如果有侵犯您权益的地方,烦请及时的告知与我,我即刻将停止侵权行为: 网址:http://www.itpub.net/thread-1020586-1-1.html http:/ ...
- MyEclipse下Struts2配置使用和Ajax、JSON的配合
原创文章,转载请注明:MyEclipse下Struts2配置使用和Ajax.JSON的配合 By Lucio.Yang 新手,初学Struts2的配置,同时尝试与Ajax通过JSON交互.首先介绍M ...
- java附件上传下载大字段版
public int up2(Map map) { StringBuffer insertSQL = new StringBuffer(); insertSQL.append("insert ...
- win7中注册tomcat服务
非安装版tomcat下载后,在bin文件夹会有一个startup.bat文件,运行该文件即可启动tomcat了.不过在服务器配置tomcat的话,就通常需要注册为服务. 在/bin文件下还有tomca ...
- VS Code - Debugger for Chrome
VS Code - Debugger for Chrome调试JavaScript的两种方式 VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于 ...
- 关于Android Launcher图标上面动态改变数字的实现
由于项目需要使用到类似小米应用商店的图标数字提示功能,谷歌百度了许多文章都没看到有真正意义上的实现(没有在国外网站上搜索),有实现在APP内部的一个ImageView上面更新数字的,当然这种太简单无非 ...
- CVTE 一面
在网上做完了测评之后,当天就收到面试的通知了,CVTE效率真高.第二天就去参加面试,面试前紧张了一把,后来去到之后发现只有几个应聘者,很多面试官前面都没人,估计现在中午一点,所以都去吃饭了.我和一个同 ...
- HDU 5828 Rikka with Sequence(线段树)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5828 [题目大意] 给出一个数列,要求支持区间加法,区间开方和区间和查询操作. [题解] 考虑开方 ...
- java的控制流程
1.顺序结构顺序结构就是指按语句执行的先后顺序,或者说语句出现的先后顺序逐条执行程序语句.语句块,完全是按照程序平台的执行约定进行的,比如第一个 HelloWorld程序:public class H ...
- GitHub Linux下使用方法
1. 在网站注册帐号,创建工程 test 进入工程,右下角会有一个项目仓库的地址.https://github.com/braverior/test.git 2.Linux下 安装github sud ...