Jak parsować string z datą, numerem klienta i zamówieniem?

0

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

0

trochę mało szczegółów. Trzymasz wszystkie komentarze per klient w jednym stringu? Sorry, ale tak to zrozumiałem

0

Wszystkie komentarze per klient są w jednym polu tekstowym, wpisane jeden pod drugim, oddzielone enterem

0

@Klaudia Z Możesz czy nie możesz zmienić w kodzie, po stronie programu, gdzie i jak będą zapisywane dalsze rekordy?

0

Nie mogę

0
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

0

Tzn?

0

Że wiele danych upchane w jedną kolumnę. Elementarz

0

Zgadzam się ale nie ja tworzyłam tą tabele i jest to jedyne miejsce gdzie te komentarze są przechowywane

0

@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ść

3
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

3

@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

2

@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)

0
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ą.

0

@Riddle No tak i dlatego nie widzę sensu w regex

@abrakadaber ok, może trochę nadinterpretowałem ostatnie zdania OP. W sumie, w mojej głowie było, że potem zapisać od razu gdzieś, a nie że zwrócić do aplikacji.

0

@Riddle https://www.db-fiddle.com/f/8F3dv2YFdrmko7KZjH5zXQ/0 wiesz jak się na telefonie paskudnie pisze takie rzeczy?

0
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.

0
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.

4

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}_[^_]+_[^_]+$';
  
  

1 użytkowników online, w tym zalogowanych: 0, gości: 1