Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вырезать всё, что идёт после символа "L" / 7 сообщений из 7, страница 1 из 1
10.03.2020, 21:03
    #39936093
Samyrro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать всё, что идёт после символа "L"
Здравствуйте, есть строка 380998887744L255456859856584. Как вырезать букву L и всё что послё неё? Или ещё лучше найти через рег. выражение номер телефона 380998887744 и оставить только его
...
Рейтинг: 0 / 0
11.03.2020, 09:42
    #39936190
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать всё, что идёт после символа "L"
Samyrro,
См. фунцию split_part
...
Рейтинг: 0 / 0
11.03.2020, 10:58
    #39936214
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать всё, что идёт после символа "L"
fte,
см. функции regexp_matches и regexp_replace. Задачу можно решить с помощью любой из них.
...
Рейтинг: 0 / 0
11.03.2020, 12:16
    #39936239
DSKalugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать всё, что идёт после символа "L"
Samyrro
Здравствуйте, есть строка 380998887744L255456859856584. Как вырезать букву L и всё что послё неё? Или ещё лучше найти через рег. выражение номер телефона 380998887744 и оставить только его


Если формат записи фиксированный, а не произвольный, то номер украинского мобильного телефона имеет фиксированную длину 12 символов
Код: plsql
1.
2.
3.
select character_length('380998887744')  -- = 12
select substring('380998887744L255456859856584', 1, 12) -- = 380998887744 если всегда брать первые 12
select substring('380998887744L255456859856584', 1,  position('L' in '380998887744L255456859856584')-1 ) -- = 380998887744 до L
...
Рейтинг: 0 / 0
11.03.2020, 12:16
    #39936240
DSKalugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать всё, что идёт после символа "L"
Если формат записи фиксированный, а не произвольный, то номер украинского мобильного телефона имеет фиксированную длину 12 символов
Код: plsql
1.
2.
3.
select character_length('380998887744')  -- = 12
select substring('380998887744L255456859856584', 1, 12) -- = 380998887744 если всегда брать первые 12
select substring('380998887744L255456859856584', 1,  position('L' in '380998887744L255456859856584')-1 ) -- = 380998887744 до L
...
Рейтинг: 0 / 0
11.03.2020, 12:52
    #39936253
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать всё, что идёт после символа "L"
DSKalugin,
таки пришлось написать. Изучать использование регулярных выражений всегда полезно.
В данном примере

Код: plsql
1.
2.
3.
-- убирает конец строки, начиная с 'L':
SELECT REGEXP_REPLACE ('12345L6789', '[L](.)*$', '', 'g') AS phone_number
-- результат: '12345'



Или
Код: plsql
1.
2.
3.
4.
5.
6.
-- Ищет группу цифр в начале строки
WITH sq AS (
SELECT REGEXP_MATCHES('12345L6789', '^[0-9]+', 'g') AS matches 
) SELECT matches [1] AS phone_num FROM sq
-- результат  REGEXP_MATCHES - массив из одного элемента, который и выбираем с помощью подзапроса.
-- если ничего не найдено (из-за непредусмотренного формата данных), результат пустой.
...
Рейтинг: 0 / 0
11.03.2020, 16:35
    #39936339
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вырезать всё, что идёт после символа "L"
Вот ещё как можно выбрать с помощью REGEXP_MATHES:

SELECT UNNEST(REGEXP_MATCHES('12345L6789' '^[0-9]+', 'g')) LIMIT 1

Будет выдан 1 результат, или совсем не будет результатов (что потребует дополнительного рассмотрения - соответствует ли формат данных предусмотренному в регулярном выражении). Способ с REGEXP_REPLACE всегда даст 1 результат, но не обнаружит непредусмотренный формат данных.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вырезать всё, что идёт после символа "L" / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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