日期:2014-05-17  浏览次数:20847 次

大家帮我看下这个sql写的对不对
本帖最后由 sunset_ni 于 2013-01-25 11:16:14 编辑
select * from  test where 1=1  and
to_date(to_char(create_time,'yyyy/mm/dd'),‘yyyy/mm/dd’) >= to_date( '2013/1/25','yyyy/mm/dd')


帮忙看对不对,不对要怎么修改。。。。
create_time 是varchar2类型。。。

------解决方案--------------------
直接写成

select * from test where to_date(create_time,'YYYY-MM-DD')>=to_date('2013/1/23','YYYY-MM-DD')
 
------解决方案--------------------
to_char(create_time,'yyyy/mm/dd')是日期型转为字符型。你既然已经是字符型了,直接转换日期型就是了
to_date(create_time,'yyyy/mm/dd')
------解决方案--------------------
select * 
  from  test 
 where 1=1  
       and
        to_date(create_time,‘yyyy/mm/dd’) >= to_date( '2013/1/25','yyyy/mm/dd')
你说create_time已经是varchar2类型。。。是说create_time已经是yyyy/mm/dd格式么?
------解决方案--------------------
让人蛋疼的日期啊。。。。
首先的create_time可能存null吗?可能存2012/02/31这样的日期吗?
想表达的意思其实就是你的日期不合理时你的需求应该怎样处理?
所以说你的这SQL是有问题,一般在处理日期时你写一个日期处理函数就可以排除那些错误造成SQL语句出错的影响。
按照你写的SQL,直接可以写成这样(在不考虑null值以及错误数据的情况下)。
select * from  test where create_time >= '2013/1/25'