如何在oracle mybatis sql的另一个字符串的末尾添加一个字符串?

问题描述 投票:1回答:1

我是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

spring oracle-sqldeveloper mybatis
1个回答
0
投票

我终于解决了这个问题。这是解决方案:

<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而不是尝试追加一些字符串来解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.