Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбить каждое слово в строке на отдельные элементы для функции IN / 6 сообщений из 6, страница 1 из 1
25.08.2021, 14:21
    #40093106
Serjiomeloman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить каждое слово в строке на отдельные элементы для функции IN
Всем привет
Столкнулся с проблемой связки PostgresQL с EXEL

Проблема:
для пользователя и интеграции с EXCEL нужно выражение:
FROM (
SELECT order_no , courier , asn
FROM rms_p009qtzb_rms_ods.v_shipment
WHERE courier in ('DRYU4172926','CMAU1748584')
Заменить на
FROM (
SELECT order_no , courier , asn
FROM rms_p009qtzb_rms_ods.v_shipment
WHERE is_actual = '1' and to_loc_type = 'W' and to_loc = '922' and courier in (?)

Проблема в том, что это работает, когда в ячейке EXCEL только 1 параметр. Например если параметр ? будет равен 'DRYU4172926', то тогда SQL спокойно отработает этот запрос.
Однако, если в ячейку писать несколько параметров, например как в исходном коде ? = 'DRYU4172926','CMAU1748584' , то SQL не найдет ни одного выражения.

Проблема заключается в том, что параметр ? отрабатывает как одна строка, т.е ('DRYU4172926','CMAU1748584') ищется как 1, грубо говоря, предложение

Как я понимаю нужна какая-либо простая функция PostgresQL, которая будет из строки (DRYU4172926 CMAU1748584) делать два элемента, опираясь на пробел и заменяя его на ,
или можно решить по принципу "сделать таблицу" чтобы строка
(DRYU4172926 CMAU1748584) превращалась в таблицу с теми же значениями DRYU4172926 и CMAU1748584 опираясь так же на разделитель пробела т.к функция in часто используется со вложенным Select, что возвращает как раз таблицу

Есть ли какие-либо функции, которые могут решить эту проблему?
...
Рейтинг: 0 / 0
25.08.2021, 19:37
    #40093186
Надфиль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить каждое слово в строке на отдельные элементы для функции IN
Serjiomeloman,
функция regexp_split_to_array
тебе поможет
...
Рейтинг: 0 / 0
25.08.2021, 23:31
    #40093202
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить каждое слово в строке на отдельные элементы для функции IN
Serjiomeloman

Есть ли какие-либо функции, которые могут решить эту проблему?

Есть, например так можно...
Код: sql
1.
2.
3.
4.
5.
6.
SELECT *
FROM (
    SELECT order_no , courier , asn
    FROM rms_p009qtzb_rms_ods.v_shipment
    WHERE is_actual = '1' and to_loc_type = 'W' and to_loc = '922' and courier =any(sting_to_array(?,' '))
) r
...
Рейтинг: 0 / 0
26.08.2021, 08:07
    #40093222
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить каждое слово в строке на отдельные элементы для функции IN
fte,
Опечатка функция, конечно же string_to_array
...
Рейтинг: 0 / 0
26.08.2021, 09:42
    #40093232
Serjiomeloman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить каждое слово в строке на отдельные элементы для функции IN
Всем спасибо)
Решил проблему так:

SELECT order_no , courier , asn
FROM rms_p009qtzb_rms_ods.v_shipment
WHERE is_actual = '1' and to_loc_type = 'W' and to_loc = '922' and courier in (SELECT foo FROM regexp_split_to_table(?, '\s+') AS foo)
...
Рейтинг: 0 / 0
26.08.2021, 09:47
    #40093233
Serjiomeloman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить каждое слово в строке на отдельные элементы для функции IN
fte,ХМ, А как она работает? :о
А какой вариант тебе кажется более предпочтительным? (До этого написал свое решение)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбить каждое слово в строке на отдельные элементы для функции IN / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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