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