【发布时间】:2019-10-12 19:31:24
【问题描述】:
我目前正在将应用程序的一部分从 Oracle 移植到 SQLite 后端(Java,使用普通 JDBC)。一个经常使用的特定于 Oracle 的特性是带有三个参数的 INSTR 函数:
INSTR(
, , )
此函数在字符串中搜索从某个位置开始的搜索字符串。第三个参数可以是正数也可以是负数。如果为负,则从字符串末尾开始向后搜索。
这个函数在 SQLite 中不可用,我能想到的最好的方法是嵌套一些其他函数:
如果
LENGTH(
) - LENGTH(SUBSTR(SUBSTR( , ), STRPOS(SUBSTR(, ), ) + 1))
如果
LENGTH(
) - LENGTH(REPLACE( , RTRIM( , REPLACE( , , '')), ''))
这似乎给出了预期的结果,但您可以理解为什么我并不真正支持这种方法。当然,因为在原始语法中 INSTR 被大量使用并且被嵌套。以后维护起来就成了灾难。
是否有更优雅的方法,或者我是否会错过一些其他本机解决方案来完成似乎相当微不足道的任务?
【问题讨论】: