Cześć,
W swojej tabeli z klientami mam kolumnę comments która przechowuje wszystkie komentarze z profilu klienta.
Komentarz który chce wyciągnąć wygląda tak yyyy-mm-dd_numerklienta_zamowienie
. Potrzebuje wyciągnąć wszystkie takie komentarze i najlepiej żeby każdy był w nowej komórce

- Rejestracja:prawie 3 lata
- Ostatnio:około rok
- Postów:9
- Rejestracja:prawie 12 lat
- Ostatnio:około 13 godzin
- Postów:1129
@Klaudia Z Możesz czy nie możesz zmienić w kodzie, po stronie programu, gdzie i jak będą zapisywane dalsze rekordy?
- Rejestracja:ponad 6 lat
- Ostatnio:9 dni
- Postów:3561
Klaudia Z napisał(a):
Cześć,
W swojej tabeli z klientami mam kolumnę comments która przechowuje wszystkie komentarze z profilu klienta.
Komentarz który chce wyciągnąć wygląda tak yyyy-mm-dd_numerklienta_zamowienie. Potrzebuje wyciągnąć wszystkie takie komentarze i najlepiej żeby każdy był w nowej komórce
To jest zly projekt
- Rejestracja:ponad 6 lat
- Ostatnio:9 dni
- Postów:3561
Że wiele danych upchane w jedną kolumnę. Elementarz
- Rejestracja:prawie 12 lat
- Ostatnio:około 13 godzin
- Postów:1129
@Klaudia Z Skoro trzeba to rozdzielić to i tak nowa tabelę IMO musisz zrobić. Więc dodanie/zmienienie funkcji zapisujacej po stronie aplikacji to tylko formalność

- Rejestracja:prawie 15 lat
- Ostatnio:około 4 godziny
- Lokalizacja:Laska, z Polski
- Postów:10056
Klaudia Z napisał(a):
Zgadzam się ale nie ja tworzyłam tą tabele i jest to jedyne miejsce gdzie te komentarze są przechowywane
SELECT c[1] as order_date,
c[2] as client_number,
c[3] as order_number
FROM (
SELECT regexp_matches(comments, '([0-9]{4}-[0-9]{2}-[0-9]{2})_([a-z0-9]+)_([a-z0-9]+)') as c
FROM clients
) as d;
Wynik:
- screenshot-20240125132954.png (37 KB) - ściągnięć: 5

- Rejestracja:ponad 12 lat
- Ostatnio:7 miesięcy
- Postów:6610
@Dregorio @AnyKtokolwiek : ja pierd**** pytacz pyta jak stringa sparsować a wy mu proponujecie przepisanie systemu. Jeszcze o moc zasilacza zapytajcie i na koniec stwierdźcie, że wątek do zamknięcia bo zasilacz za słaby... Jakbym elektrodę przeglądał (i to wcale nie jest komplement)

- Rejestracja:prawie 15 lat
- Ostatnio:około 4 godziny
- Lokalizacja:Laska, z Polski
- Postów:10056
Dregorio napisał(a):
@Riddle Też o tym myślałem, ale chyba bym poszedł w stronę
strings_to_array
skoro i tak wiadomo czym jest przedzielone. Regex to kolejny problem do utrzymania :P
Separatory się powtarzają.
- Rejestracja:prawie 12 lat
- Ostatnio:około 13 godzin
- Postów:1129
- Rejestracja:prawie 12 lat
- Ostatnio:około 13 godzin
- Postów:1129
@Riddle https://www.db-fiddle.com/f/8F3dv2YFdrmko7KZjH5zXQ/0 wiesz jak się na telefonie paskudnie pisze takie rzeczy?
- Rejestracja:ponad 6 lat
- Ostatnio:9 dni
- Postów:3561
Dregorio napisał(a):
@Riddle Też o tym myślałem, ale chyba bym poszedł w stronę
strings_to_array
skoro i tak wiadomo czym jest przedzielone. Regex to kolejny problem do utrzymania :P
Nie tylko utrzymaniówka, ale zwykły koszt na procesorze / procesorach.
Przejściowo jeden ze znajomych serwerów był w biurze, i słychać było po wentylatorach, kiedy baza dostawała procesorowo w d...
Bo "my" chyba tak normalnie nie za bardzo o tym myślimy
Gdybym miał szukać, bym szukał jakimś rodzajem indexof i substring (nie mam dowodów - intuicja)
Klaudia Z napisał(a):
Zgadzam się ale nie ja tworzyłam tą tabele i jest to jedyne miejsce gdzie te komentarze są przechowywane
Komentarze do zlecenia przy clients ... piekne.
Jak sobie "wymysliciel" tej bazy poradził z krotnosciami
Dregorio napisał(a):
@Klaudia Z Skoro trzeba to rozdzielić to i tak nowa tabelę IMO musisz zrobić. Więc dodanie/zmienienie funkcji zapisujacej po stronie aplikacji to tylko formalność
To nieuniknione zawalczyć o zmianę, zwłaszcza, że to niejedyny problem.

- Rejestracja:prawie 15 lat
- Ostatnio:około 4 godziny
- Lokalizacja:Laska, z Polski
- Postów:10056
AnyKtokolwiek napisał(a):
Nie tylko utrzymaniówka, ale zwykły koszt na procesorze / procesorach.
Przejściowo jeden ze znajomych serwerów był w biurze, i słychać było po wentylatorach, kiedy baza dostawała procesorowo w d...
Mikrooptymalizacja. Pokaż w profilerze albo innym narzędziu faktyczną różnicę między takim regexpem a string_to_array()
i podaj liczbę na ilu recordach widać różnicę (obstawiam milisekundy przy milionach wierszy, może), już nie mówiąc o tym że przy którymś użyciu postgres sobie zapisze skompilowanego regexpa i przejedzie go optymalizatorem.
- Rejestracja:prawie 10 lat
- Ostatnio:około 14 godzin
- Postów:2368
Rozbudowując przykład @Dregorio
https://www.db-fiddle.com/f/2HWXadZEhbrP6btdXAuJC4/0
create table clients (
id text,
comments TEXT
);
insert into clients values('id1','foo\nbar\n2024-01-16_id1_zamowienie1\ninny_komentarz\n2024-01-17_id1_zamowienie2\n2024-01-18_id1_zamowienie3');
insert into clients values('id2','foo\nbar\n2023-01-16_id2_zamowienie2\ninny_komentarz\n2023-01-17_id2_zamowienie2\n2023-01-18_id2_zamowienie3');
WITH unnested_data AS (
SELECT id,unnest(string_to_array(comments, '\n')) AS comment FROM clients
)
SELECT
id,comment
FROM
unnested_data
WHERE
comment ~ '^\d{4}-\d{2}-\d{2}_[^_]+_[^_]+$';