Попробуйте это:
regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)0$$,' ','g')
Используется положительный вид сзади ((?<=^[0,]*)
), так что совпадают только нули, где перед ними находится последовательность нулей или запятых ([0,]
) до начала (^
). Вместе с глобальным модификатором ('g'
, дополнительный аргумент функции regexp_replace()
по сравнению с вашим) все такие нули заменяются, так как с глобальным модификатором заменяется не только первое совпадение, но и любое.
Ой, подождите, теперь я не уверен, что вы хотели заменить только нули или запятые тоже? Если это так, используйте это:
regexp_replace(to_char(field,'FM000,000,000'),$$(?<=^[0,]*)[0,]$$,' ','g')
Вместо нуля он соответствует нулю или запятой [0,]
. Остальное как выше.
Но предпросмотр поддерживается только с версии 9.6 . В качестве обходного пути можно сначала перевернуть строку, сделать эквивалент с lookbehinds (которые поддерживаются в более низких версиях) и вернуть обратно.
Для замены только нулей:
reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'0(?=[0,]*$)',reverse(' '),'g')),
Для замены нулей и запятых:
reverse(regexp_replace(reverse(to_char(field,'FM000,000,000')),'[0,](?=[0,]*$)',reverse(' '),'g'))
См. Пример для SQL Fiddel .