Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Odstranění posledního znaku z řetězce

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Vlaďka Š
Člen
Avatar
Vlaďka Š:12.1.2023 13:57

Ahoj,
zase řeším něco s čím se strašně peru, tak jde poprosit o pomoc.
Mám následující sloupeček v tabulce v SQL

slunicko: 0,564 Kč bez DPH| jahoda: 0,54 Kč bez DPH
materidouska: 2,36 bez DPH|

Data jsou jako text.

Potřebuji z tohoto sloupce odstranit na konci ten znak | ale tak, aby, pokud za ním následuje nějaký další text, tak aby tam zůstal ten znak | a i ten text za ním. Pokud je v daném řádku na konci | tak, aby tam toto nebylo.

Díky moc, za radu.

Zkusil jsem: Zkoušela jsem toto:
Substring(x From 1 FOR Position('|' IN x)-1), ale to mi odmazalo i ty věci zatím, ale to nechci.

Chci docílit: Tudíž výsledek by měl vypadat takto:
slunicko: 0,564 Kč bez DPH| jahoda: 0,54 Kč bez DPH
materidouska: 2,36 bez DPH

 
Odpovědět
12.1.2023 13:57
Avatar
Petan
Člen
Avatar
Petan:12.1.2023 14:15

melo by to byt neco takoveho

case when SUBSTRING(x,LEN(x),1) = '|' THEN SUBSTING(x,1,LEN(x)-1) ELSE x END

SUBSTRING A LEN jsou zavisle na konkretnim SQLu

 
Nahoru Odpovědět
12.1.2023 14:15
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Vlaďka Š
DarkCoder:12.1.2023 14:40
size_t len = strlen(buffer);
if(len){
  if(buffer[len - 1] == '|') buffer[len - 1] = '\0';
}

Jinými slovy:

Zjisti celkovou délku textu. Pokud text obsahuje alespoň jeden platný znak, otestuje poslední znak textu na to zda je |. Pro případ že bude nastav poslední znak na příznak konce textu.

Toto je obecný postup, nikoli řešení pro SQL.

Nahoru Odpovědět
12.1.2023 14:40
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Vlaďka Š
Člen
Avatar
Vlaďka Š:12.1.2023 16:19

Ahoj, díky moc, zkusím. Určitě to zafunguje. Díky moc.

 
Nahoru Odpovědět
12.1.2023 16:19
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.1.2023 7:43

regexp '[|]$'- tusim, ze by to mohlo jit i pres regularni vyrazy elegantneji, ale jine funkce byvaji obvykle rychlejsi

 
Nahoru Odpovědět
13.1.2023 7:43
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Peter Mlich
Peter Mlich:13.1.2023 7:47

Jo, ta funkce se jmenuje regexp_replace. Ja to pouzivam spis v php nez sql, takze by sis to musel vygooglovat, jak se to zapisuje spravne pro sql

 
Nahoru Odpovědět
13.1.2023 7:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.