select * from tblName where to_date(replace(replace(replace(columnName,'年','-'),'月','-'),'日',''),'yyyy-mm-dd hh24:mi:ss') > to_date('2011-04-20','yyyy-mm-dd')
用途:可以方便的查找表中某一时间范围内的记录,其中tblName可以是任何表,columnName可以是表中具有如‘2011年3月19日 15:14:22’中文格式数据的任何字段
思路:to_date方法不能将中文格式(如2011年3月19日 15:14:22 )转成日期类型,所以另辟蹊径。
第一步:将varchar2类型中文日期转成能支持to_date方法的日期格式的字符串,注意:这里依然还是字符串但是转成了to_date支持的数据格式(如2011-04-20,只要oracle支持就好,2011/04/20也行)
eg:replace(replace(replace(columnName,'年','-'),'月','-'),'日','')
第二步:将第一步获得的字符串用to_date()转成日期
eg:to_date(replace(replace(replace(columnName,'年','-'),'月','-'),'日',''),'yyyy-mm-dd hh24:mi:ss')
第三步:在where语句中像从前那样写好你所需要的时间范围,我这里是检索日期大于2011年4月20日的所有数据
eg:where to_date(replace(replace(replace(columnName,'年','-'),'月','-'),'日',''),'yyyy-mm-dd hh24:mi:ss') > to_date('2011-04-20','yyyy-mm-dd')
这里只是个土方法,今天遇上了,想到的方法,应该是有更简单的方法,欢迎拍砖。。。