我是mybatis的新手,我在向sql查询提供的参数中添加substring时遇到了问题。
我目前正在研究mybatis,我正在尝试将一个子字符串添加到我给sql查询的参数中。我使用的是Oracle ojdbc14和版本10.2.0.4.0。
这是我对试用期望的结果:
AND EVT_OCCURDT BETWEEN TO_DATE('20171102 000000', 'YYYYMMDD HH24MISS') + 3/24
AND TO_DATE('20171102 235959', 'YYYYMMDD HH24MISS') + 3/24
而我所做的是:
<if test="evt_occurdt != null and !evt_occurdt.equalsIgnoreCase('')">
AND EVT_OCCURDT BETWEEN TO_DATE(#{evt_occurdt} || ' 000000', 'YYYYMMDD HH24MISS') + 3/24
AND TO_DATE(#{evt_occurdt} || ' 235959', 'YYYYMMDD HH24MISS') + 3/24
</if>
我的试验以java.sql.SQLException:ORA-01843结束。我想我的语法有问题,但我找不到合适的语法,包括参数。
UPDATE
我尝试了其他一些解决方案
<if test="evt_occurdt != null and !evt_occurdt.equalsIgnoreCase('')">
AND EVT_OCCURDT BETWEEN TO_DATE(TO_CHAR(#{evt_occurdt}, 'YYYYMMDD') || ' 000000', 'YYYYMMDD HH24MISS') + 3/24
AND TO_DATE(TO_CHAR{#(evt_occurdt}, 'YYYYMMDD') || ' 235959', 'YYYYMMDD HH24MISS') + 3/24
</if>
它仍然无效,错误代码为ORA-01481
我终于解决了这个问题。这是解决方案:
<if test="evt_occurdt != null and !evt_occurdt.equalsIgnoreCase('')">
AND trunc(EVT_OCCURDT) = TO_DATE(TO_CHAR(#{evt_occurdt}), 'YYYY-MM-DD')
</if>
只是通过使用trunc()
来EVT_OCCURDT而不是尝试追加一些字符串来解决问题。