powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить 1-й символ из строки, если это 0?
5 сообщений из 5, страница 1 из 1
Как удалить 1-й символ из строки, если это 0?
    #40102405
__amg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее если начинается на "0.",
Одним выражением хочется, не одним и сам смогу).
Нужно при экспорте в Ексель дробных чисел.
...
Рейтинг: 0 / 0
Как удалить 1-й символ из строки, если это 0?
    #40102789
__amg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вобщем вот так работает вроде
Код: sql
1.
regexp_replace('0.1', '0*','')
...
Рейтинг: 0 / 0
Как удалить 1-й символ из строки, если это 0?
    #40103243
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__amg,

Тогда уж так

Код: plsql
1.
regexp_replace('0.1', '^0','')



или если более точно следовать условиям задачи

__amgТочнее если начинается на "0.",

Код: plsql
1.
regexp_replace('0.1', '^0\.','.')



А то в Вашем варианте нули будут удаляться и из середины числа, попробуйте:

Код: plsql
1.
regexp_replace('1.001', '0*','')
...
Рейтинг: 0 / 0
Как удалить 1-й символ из строки, если это 0?
    #40103365
__amg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swa111,
проверил regexp_replace('1.001', '0*','') - правильно отрабатывает, возвращает 1.001.
версия сервера 13.3
...
Рейтинг: 0 / 0
Как удалить 1-й символ из строки, если это 0?
    #40103423
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что тут вот в чем дело.

Шаблон '0*' говорит о том, что в искомой строке символ '0' может встретится 0 или более раз. Т.е. встретить хотя бы раз '0' вовсе не обязательно, чтобы ругулярное выражение было найдено. Берем первый символ, если это не '0', то шаблон найден, дальше искать не надо (по умолчанию поиск не "жадный"). Если первый символ '0', то идем по строке дальше, пока нули не закончатся.

В результате выражение ведет себя вроде бы корректно, если не смущает тот факт, что замена происходит при каждом вызове. Просто замена выглядит как добавление пустой строки '' в начало исходной строки, и визуально незаметна. Но подставим вместо пустой строки что-то еще и замена будет видна:
Код: sql
1.
2.
3.
4.
select regexp_replace('1.001', '0*', '!');
 regexp_replace 
----------------
 !1.001


На мой взгляд регулярное выражение можно переписать так: '^0+'. Т.е. мы ищем нули только вначале строки(^) и хотя бы один должен встретиться обязательно (+). Тогда ненужные замены не будут срабатывать:
Код: sql
1.
2.
3.
4.
select regexp_replace('1.001', '^0+', '!');
 regexp_replace 
----------------
 1.001


а нужные будут:
Код: sql
1.
2.
3.
4.
select regexp_replace('001.001', '^0+', '');
 regexp_replace 
----------------
 1.001
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить 1-й символ из строки, если это 0?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]