Chciałbym, aby wszystkie znaki w polu znajdowały się przed spacją
Na przykład, jeśli field1
tak"chara ters"
Chcę, żeby wróciło "chara"
Jak wyglądałoby to wybrane stwierdzenie?
SELECT LEFT(field1,LOCATE(' ',field1) - 1)
Zwróć uwagę, że jeśli dany ciąg nie zawiera spacji, zwróci to pusty ciąg.
select SUBSTRING_INDEX( field1, ' ', 1 ) from table;
będzie wybór, czy chcemy mieć cały ciąg, jeśli nie ma miejsca.SUBSTRING_INDEX
) jest „lepsza” jako ogólne rozwiązanie, ponieważ zachowa wartości, które nie zawierają separatora, zamiast skutkować pustą wartością.Poniżej znajduje się kolejna metoda, która działa i może niektórym wydawać się nieco prostsza. Używa funkcji SUBSTRING_INDEX MySQL . 1 zwraca wszystko przed pierwszą spacją, a -1 zwraca wszystko po ostatniej spacji.
Zwraca „chara”:
SELECT SUBSTRING_INDEX( field1, ' ', 1 )
Zwraca „ters”:
SELECT SUBSTRING_INDEX( field1, ' ', -1 )
Detale
Wartość dodatnia będzie szukać określonego znaku od początku ciągu, a wartość ujemna rozpocznie się od końca ciągu. Wartość liczby wskazuje ilość określonego znaku do wyszukania przed zwróceniem pozostałej części ciągu. Jeśli szukany znak nie istnieje, zostanie zwrócona cała wartość pola.
W tym przypadku -2 zwróci wszystko na prawo od przedostatniej spacji, która nie istnieje w tym przykładzie, więc cała wartość pola zostanie zwrócona.
źródło
Potrzebowałbyś trochę operacji na łańcuchach . Zakładając, że każde pole ma co najmniej jedną spację:
SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;
Bezpieczne podejście:
SELECT IF( LOCATE(' ', field1), SUBSTR(field1, 0, LOCATE(' ', field1)), field1 ) FROM your_table;
źródło
SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;