在oracle中使用to_char 时发生错误,语句如下
SELECT * FROM TC_SCHEDLE t where TO_CHAR(t.LESSON_TIME, 'YYYYMMDD')>TO_CHAR(2017-05-29 17:22:46,'YYYYMMDD')
后面的to_char不要了,直接写 ‘2017-05-29’,不更好吗?
SELECT * FROM TC_SCHEDLE t where
TO_CHAR(t.LESSON_TIME, 'YYYYMMDD')>TO_CHAR('2016-05-29 17:22:46','YYYYMMDD');
--后面要加引号吧.
首先报错估计是因为,你的日期常量没有单引号括起来。
SELECT * FROM TC_SCHEDLE t where TO_CHAR(t.LESSON_TIME, 'YYYYMMDD')>TO_CHAR('2017-05-29 17:22:46','YYYYMMDD');
其次,你是字符串比较,
好像记起来了,oracle不能隐式优先把字符串转成日期型。所以写'2017-05-29 17:22:46' 估计不会像SQL Server一样,默认转成日期型。所以,日期常量不能直接写成字符串型,想用日期常量,必须手动to_date,那么,可如下写。'2016-05-29 17:22:46' 作为参数也ok。这种写法逻辑ok,但如果LESSON_TIME字段加索引优化,就不能这么写了。直接日期比较,可以用到TRUNC函数。
SELECT * FROM TC_SCHEDLE t where TO_CHAR(t.LESSON_TIME, 'YYYYMMDD')>TO_CHAR(TO_DATE('2017-05-29 17:22:46','yyyy-mm-dd hh24:mi:ss'),'YYYYMMDD');