首先createtime类型为varchar;
在navicat中查询页直接查询可行,语法如下:
select * FROM table WHERE CREATE_TIME::TIMESTAMP <= (now() - interval '1 day')
但是在mybatis的xml配置文件里写的时候就不可行了,因为我接收的参数是1这个数字天数,按照语法要进行字符串拼接后面要拼接一个’ day’,可能是我写的有误反正就是不行(contact语法拼接也试过了),我写的↓↓↓:
select * from table WHERE CREATE_TIME::TIMESTAMP <![CDATA[ <= ]]> (now() - interval #{dayNum} || ' day');
解决方法:不在sql里计算时间,改成在java中计算时间,然后传字符串
1.在调用方法前计算运算后的时间
Date date = new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeLine = df.format(new Date(date.getTime() - dayNum * 24 * 60 * 60 * 1000));
2.mybatis配置文件中改用字符串比大小
SELECT FROM TABLE WHERE CREATE_TIME <![CDATA[ <= ]]> #{timeLine}