Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить 1-й символ из строки, если это 0? / 5 сообщений из 5, страница 1 из 1
06.10.2021, 17:04
    #40102405
__amg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить 1-й символ из строки, если это 0?
Точнее если начинается на "0.",
Одним выражением хочется, не одним и сам смогу).
Нужно при экспорте в Ексель дробных чисел.
...
Рейтинг: 0 / 0
07.10.2021, 16:35
    #40102789
__amg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить 1-й символ из строки, если это 0?
вобщем вот так работает вроде
Код: sql
1.
regexp_replace('0.1', '0*','')
...
Рейтинг: 0 / 0
09.10.2021, 10:03
    #40103243
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить 1-й символ из строки, если это 0?
__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
09.10.2021, 22:25
    #40103365
__amg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить 1-й символ из строки, если это 0?
Swa111,
проверил regexp_replace('1.001', '0*','') - правильно отрабатывает, возвращает 1.001.
версия сервера 13.3
...
Рейтинг: 0 / 0
10.10.2021, 16:11
    #40103423
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить 1-й символ из строки, если это 0?
Думаю, что тут вот в чем дело.

Шаблон '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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить 1-й символ из строки, если это 0? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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