В настоящее время я портирую часть приложения из Oracle на сервер SQLite (Java, используя обычный JDBC).Одной из часто используемых специфических функций Oracle является функция INSTR с тремя аргументами:
INSTR (,, )
Эта функция ищет в строке строку поиска, начиная с определенной позиции.Третий параметр может быть как положительным, так и отрицательным.Если оно отрицательное, поиск работает в обратном направлении, начиная с конца строки.
Эта функция недоступна в SQLite, и лучшее, что я мог бы придумать, - это альтернатива вложением некоторых других функций:
Если положительно:
ДЛИНА () - ДЛИНА (SUBSTR (SUBSTR (, )), STRPOS (SUBSTR(, ),) + 1))
Если отрицательно (в нашем случае -1 используется только отрицательное значение):
ДЛИНА () - ДЛИНА (ЗАМЕНА (, RTRIM (), ЗАМЕНА (,, '')), ''))
Кажется, это дает желаемый результат, но вы можете понять, почему я не очень поддерживаю такой подход.Конечно, потому что в оригинальном синтаксисе INSTR используется часто и также является вложенным.Впоследствии это становится катастрофой для техобслуживания.
Есть ли более элегантный подход, или я могу упустить какое-то другое нативное решение для того, что кажется довольно тривиальной задачей?