本文主要涉及三个问题:to_tate函数、Trunc函数的使用方法及date字段数据只获取日期不获取时间的问题
1、两个函数的使用方法:
(1)to_date()
用法:TO_DATE('2016/4/13 0:00:00','yyyy-mm-dd hh24:mi:ss')
(2)TRUNC()
设:date='25-7月-16'
TO_DATE(date, '精度'),精度有'DD'(日),'MM'(月),'YY'(年)三种;
①DD
TO_DATE(date, 'DD') 返回当前日期:25-7月-16;
②MM
TO_DATE(date, 'DD') 返回当月第一天日期:1-7月-16;
③YY
TO_DATE(date, 'DD') 返回当年第一天日期:1-1月-16;
其他格式详细参考博文:http://blog.csdn.net/oscar999/article/details/16839417
2、本文重点(日期查询只精确到日期,而忽略时分秒)
设:有一个表TableA,该表有一个CreatedDate字段
有如下查询语句:
SELECT CreatedDate
FROM TableA
WHERE TRUNC(CreatedDate,'DD') BETWEEN
TRUNC(TO_DATE('2016/4/13 0:00:00','yyyy-mm-dd'),'DD') AND
TRUNC(TO_DATE('2016/4/14 0:00:00','yyyy-mm-dd hh24:mi:ss','DD');
上述sql语句, 第一个Trunc函数,本意是将指定的 精确到秒的日期 '2016/4/13 0:00:00',转换为 只精确到日期后再参与相关计算。但执行后会报错误:日期格式图片在转换整个输入字符串之前结束。
错误原因是:to_date()函数的第一个参数“日期“字符串,与第二个参数“日期格式”字符串的精度必须一致。
上述sql语句,第二个Trunc函数的格式是正确格式。
3、一点工作经验
做一件事情累了的时候,就要停下来,休息一下或换做其他事情,不要强行加班解决,否则事倍功半。
比如:这次调这个sql语句问题,周五加班一个多小时,一句句调试,尝试各种转换,没有解决;周一,稍微分析一下,五分钟搞定。
当然这么说,有点绝对,有可能今天的五分钟正是基于上周的一个小时的尝试。
只是,分享出来,给大家一个参考。