[MySQL] Jak usunąć wszystkie znaki w polu tabeli znajdujące się po znaku końca linii?
Ostatnia zmiana: 22.11.2008, Autor artykułu: Waldemar Miotk

Zacznijmy od razu od przykładu: masz tabelę w bazie danych ze znakami końca linii w polu tekstowym. Chciałbyś usunąć cały tekst znajdujący się po prawej stronie znaku końca linii, z tym że jeżeli nie ma znaku końca linii to tekst powinien pozostać taki jaki jest. MySql oczywiście umożliwia i takie działanie.
Po pierwsze musimy ustalić w którym miejscu znajduje się pierwszy znak końca linii. Przypuśćmy, iż nazwą pola jest:
nazwa. Wykonujemy to przy pomocy funkcji
INSTR():
INSTR(nazwa,'\n')
Jeżeli wiemy już gdzie znajduje się znak końca linii możemy usunąć wszystko co znajduje się za tym znakiem (wraz ze znakiem) w prawo. A w zasadzie oznacza to pozostawienie tylko pierwszej części nazwy. Wykorzystamy do tego funkcję SUBSTRING(), która wycina fragment ciągu:
SUBSTRING(nazwa,1,INSTR(nazwa,'\n')-1)
Mamy już fragment pola do znaku końca linii. Z tym, że jeżeli nie ma takiego znaku w polu, to zostanie on całkowicie wycięty. Aby do tego nie dopuścić stosujemy instrukcję warunkową, która w przypadku braku znaku poda pełną zawartość pola nazwa:
IF((INSTR(nazwa,'\n')>0), SUBSTRING(nazwa,1,INSTR(nazwa,'\n')-1), nazwa)
Oczywiście znaku nie ma jeżeli funkcja INSTR() podaje wartość 0.
Zanim się zacznie zmieniać dane należy sprawdzić, czy wszystko działa jak należy:
SELECT IF((INSTR(nazwa,'\n')>0), SUBSTRING(nazwa,1,INSTR(nazwa,'\n')-1), nazwa), nazwa FROM tabela_z_danymi
No i teraz wystarczy podłożyć to do zwykłej instrukcji UPDATE aby uzyskać odpowiedni wynik - zmiany w bazie danych:
UPDATE tabela_z_danymi SET nazwa = IF((INSTR(nazwa,'\n')>0), SUBSTRING(nazwa,1,INSTR(nazwa,'\n')-1), nazwa)