oracle date日期类型 精析
一、date
1.date、sysdate格式说明
展示
date类型,展示格式既可以为:YYYY/MM/DD,也可以为YYYY/MM/DD HH24:MI:SS;
其存储格式只有一种:YYYY/MM/DD HH24:MI:SS
展示格式一:
当你只存年月日时,date实际存储的是:年月日0时0分0秒,在plsql中,其展示格式为:YYYY/MM/DD,
将其转换成YYYY/MM/DD HH24:MI:SS时,返回的是YYYY/MM/DD 00:00:00。
展示格式二:
当date实际存储的是年月日时分秒时,在plsql中,其展示格式为:YYYY/MM/DD HH24:MI:SS;
系统时间sysdate,在plsql中,其展示格式为:YYYY/MM/DD HH24:MI:SS。
说明:与插入时的格式无关
证实
TESTDATE表结构

插入sql的日期格式及结果展示

补充:
当插入年月日时分秒且时分秒为:00:00:00,在plsql中是不显示时分秒的。

要想显示出来,需用to_char()

若是还是对推荐有疑问,请看下面的 4.2 查询指定时间段的数据
2.日期转字符串
TO_CHAR(date,format)
方式一:只带一个参数
select to_char(t.schedule_date) from CONSULT_SCHEDULE t
--28-APR-17
方式二:带2个参数
转换格式不区分大小写;

小时格式化:不带24时,默认为12小时制,24小时格式转换时需要指明;

分钟格式化:可以使用mi或mm,建议使用MI。

说明:
格式化成yyyy年mm月dd日
--年月日
--需要填充3个空格,不然‘日’显示不出来
SELECT TO_CHAR(SYSDATE,'yyyy"年"MM"月"dd"日" ') 系统日期 FROM DUAL
注意:
年月日需加上双引号;
别名不能加单引号、双引号。
3.字符串转日期
方法一:
TO_DATE('dateStr', format),规则如下:
转换格式不区分大小写;
小时格式化:不带24时,默认为12小时制,24小时格式转换时需要指明;
分钟格式化:必须使用mi,不能使用mm,否则会报错;
dateStr的长度<=format的长度,都可以实现类型转换:
方式一:标准格式
年月日

说明:
年月日时分秒

方式二:字符串只到分,会自动添加上:00秒。
方式三:字符串也是只到日

方法二:
DATE'YYYY-MM-DD',并且只能是这一种格式。

另外,TO_DATE(date),该函数也可以只传一个参数,但是这个参数必须是date类型,
表示的含义是:将任何格式的日期类均转换成YYYY/MM/DD的格式。

4.根据日期查询数据
说明:这里着重介绍的是日期字段带有时分秒的
4.1 查询某一天的数据
测试环境:
VIRTUAL_CARD表中共有5条记录;
字段REGTIME的字段类型为date。
情景模拟:查询2018年7月18日的数据记录
格式要求:日期转变成YYYY-MM-DD HH24:MI:SS格式的字符串
方式一:查询条件使用字符串实现
--查询条件按字符串进行
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TO_CHAR(T.REGTIME, 'yyyy-mm-dd') = '2018-07-18'
方式二:查询条件使用日期实现
方法一:TRUNC()
--查询条件按日期进行1
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TRUNC(T.REGTIME) = TO_DATE('2018-07-18', 'YYYY-MM-DD')
方法二:TO_DATE()
--查询条件按日期进行2
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TO_DATE(T.REGTIME) = TO_DATE('2018-07-18', 'YYYY-MM-DD')
方式三:利用TO_DATE()特性
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE T.REGTIME >= TO_DATE('2018-07-18', 'YYYY-MM-DD')
AND T.REGTIME < TO_DATE('2018-07-19', 'YYYY-MM-DD')
方法四:TO_CHAR()-->TO_DATE() 不建议使用
SELECT TO_CHAR(T.REGTIME, 'YYYY-MM-DD HH24:MI:SS') REGTIME
FROM VIRTUAL_CARD T
WHERE TO_DATE(TO_CHAR(T.REGTIME, 'YYYY-MM-DD'), 'YYYY-MM-DD') =
TO_DATE('2018-07-18', 'YYYY-MM-DD')
查询结果展示

updateTime--2018年8月15日10点21分
4.2 查询指定时间段的数据
表数据展示

场景:查询从2018-08-05至2018-08-06的数据
错误实现方式:
--错误实现:between and
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME BETWEEN TO_DATE('2018-08-05', 'yyyy-mm-dd') AND
TO_DATE('2018-08-07', 'yyyy-mm-dd')
ORDER BY REGTIME
查询结果:[2018/08/05 00:00:00,2018/08/07 00:00:00]

方式一:
--方式一:[2018/08/05 00:00:00,2018/08/06 23:59:59]
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME >= TO_DATE('2018-08-05', 'yyyy-mm-dd') AND
REGTIME < TO_DATE('2018-08-07', 'yyyy-mm-dd')
ORDER BY REGTIME

方式二:推荐使用
--方式二:[2018/08/05 00:00:00,2018/08/07 00:00:00)
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME >= TO_DATE('2018-08-05', 'yyyy-mm-dd') AND
REGTIME < TO_DATE('2018-08-06', 'yyyy-mm-dd') + 1 --2018-08-07
ORDER BY REGTIME

方式三:
--方式三
SELECT REGTIME
FROM VIRTUAL_CARD
WHERE REGTIME >= TO_DATE('2018-08-05 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND
REGTIME <= TO_DATE('2018-08-06 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
ORDER BY REGTIME
5.date类型进行加减运算
二、timestamp
1.格式
--查询系统时间戳
SELECT SYSTIMESTAMP FROM DUAL

三、相互转换
1.日期转时间戳
--系统时间转时间戳
SELECT CAST(SYSDATE AS TIMESTAMP) DATE_TO_TIMESTAMP FROM DUAL
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
oracle date日期类型 精析的更多相关文章
- Java String类型转换成Date日期类型
插入数据库时,存入当前日期,需要格式转换 import java.text.SimpleDateFormat; formatter = new SimpleDateFormat( "yyyy ...
- SpringMVC解决@ResponseBody返回Json的Date日期类型的转换问题
在做项目的时候,发现后台把Date类型的属性以json字符串的形式返回,前台拿不到转换后的日期格式,始终响应回去的都是long类型时间戳. 查阅资料之后找到解决方法: 方法一(在springmvc的x ...
- Date日期类型的绑定
自定义类型的绑定 springmvc没有提供默认的对日期类型的绑定,需要自定义日期类型的绑定 第一张图是po类中日期属性,第二张图是页面中日期属性的内容,第三张图片是访问出现400错误 因为日期的格式 ...
- oracle中日期类型 to_date 和to_timestamp什么区别啊?
1.to_date() 和to_timestamp()区别 由于oracle中date类型只支持到秒,不支持到毫秒,所以to_date()不能取到毫秒.如果要取到毫秒,oracle 9i以上版本,可以 ...
- easyui框架Date日期类型以json形式显示到前台datagrid时,显示为[object Object]
如下图,easyui当后台把时间数据返回转换成json然后加载在easyui的datagrid里面,显示为[object Object] 需要对时间格式添加格式的显示方法 /** * 时间格 ...
- java中Date日期类型的大小比较
方法一:java.util.Date类实现了Comparable接口,可以直接调用Date的compareTo()方法来比较大小 String beginTime = "2018-07-28 ...
- java中String类型与Date日期类型的互相转换
//String格式的数据转化成Date格式,Date格式转化成String格式 SimpleDateFormat formatter= new SimpleDateFormat("yyyy ...
- Java date日期类型,结束日期减去开始日期求两者时间差,精确到秒
/** * @Author: * @Description: * @Date: 2019/4/10 19:01 * @Modified By: */ @Slf4j public class DateU ...
- Date日期类型转化成中文字符串
例子: select to_char(sysdate,'yyyy"年"mm"月"dd"日"') as nowYear from dual 结 ...
随机推荐
- C#子类如何调用父类
C#中子类是如何调用父类的?带着这个问题,体验如下: □ 通过子类无参构造函数创建子类实例 创建父类Person和子类Student. public class Person { public Per ...
- 论DELPHI跨平台中间件的策略
论DELPH跨平台中间件的策略 1)起先DELPHI只支持WINDOWS,此时DELPHI三层开发的眼里只有WINDOWS COM. 基于WINDOWS COM的OleVariant组合拳=TData ...
- java、js中实现无限层级的树形结构(类似递归)
js中: var zNodes=[ {id:0,pId:-1,name:"Aaaa"}, {id:1,pId:0,name:"A"}, {id:11,pId:1 ...
- 使用HTML5画饼图
在进行数据的统计分析时, 饼图也是比较经常用到的一类统计图. 需求分析: 一个饼图一般包含以下几部分: 1.标题 2.扇形 3.份额(百分比) 4.标识器 设计: ...
- 【BZOJ】【2127】happiness
网络流/最小割 Orz Hzwer. 这题他题解说的比较简略……我手画了个图才明白过来…… 嗯对于每个人选文or理的单独收益大家应该很好理解……连S->i 权值为选文的喜悦值,i->T权值 ...
- OTL翻译(10) -- OTL的流缓冲池
OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流 ...
- CF 463D Gargari and Permutations [dp]
给出一个长为n的数列的k个排列(1 ≤ n ≤ 1000; 2 ≤ k ≤ 5).求这个k个数列的最长公共子序列的长度 dp[i]=max{dp[j]+1,where j<i 且j,i相应的字符 ...
- Iterable转List
Iterable转List Iterable<Entity> geted = entityDao.findAll(); List<Entity> list = Lists.ne ...
- Oracle 错误收集
Oracle 错误大全 ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-0 ...
- Oracle查询client编码集
Oracle查询client编码集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------- ...