Я только что узнал, что regexp_substr()
идеально подходит для этой цели:)
Моя задача - выбрать правые 16 символов из контрольной строки, которая теоретически может быть длиной от 7 до 250 символов. Меня раздражает, что substr( OurReference , -16 )
возвращает null
, когда length( OurReference ) < 16
. (С другой стороны, вполне логично и то, что Oracle, следовательно, возвращает null
всякий раз, когда вызов substr()
выходит за границы строки.) Однако я могу установить регулярное выражение для распознавания всего между 1 и 16 любого символа прямо перед концом строки:
regexp_substr( OurReference , '.{1,16}$' )
Когда речь идет о проблемах производительности, связанных с регулярными выражениями, я не могу сказать, какое из решений GREATER()
и это работает лучше всего. Кто-нибудь проверял это? Как правило, я видел, что регулярные выражения довольно быстрые, если они написаны аккуратно и хорошо (как это).
Удачи! :)