Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciąganie pierwszej liczby z pola w którym znajdują się liczby i tekst
Forum PHP.pl > Forum > Bazy danych > MySQL
elektrrrus
Witam. Musze z pola w bazie danych mysql mogącego zawierać i liczby i tekst wydobyć tylko pierwsza liczbę. Musi się to odbyć w zapytaniu sql, bo będzie użyte w ORDER BY.
Przykładowo wygląda tak:
Zawartość pola: "od 40 do 100", musze wydobyć: 40
Zawartość pola: "od 40", musze wydobyć: 40
Zawartość pola: "40-100", musze wydobyć: 40
Zawartość pola: "40", musze wydobyć: 40
Zawartośc pola: "40 do 100", musze wydobyć: 40

Próbowałem z funkcją SUBSTRING_INDEX, i rozbijanie po spacji, ale to nie daje satysfakcjonujących wyników.
CAST AS UNSIGNED również nie działa tak jak bym tego oczekiwał.
maciu
najlepiej będzie wykorzystać do tego wyrażenia regularne
http://dev.mysql.com/doc/refman/5.0/en/regexp.html
elektrrrus
Nie o to mi chodziło...
Z tego co rozumiem, REGEXP w mysql zwraca tylko wartości 0 jeśli dane pole nie spełnia wyrażenia, i 1 jeśli spełnia.
Mi nie chodzi o sprawdzanie czy dane pole spełnia wyrażenie, tylko wyciągnięcie z danego pola fragmentu, który pasowałby do patternu, tak jak to można zrobić w php-owej funkcji preg_match podająć jako trzeci argument nazwę tablicy do której te dopasowywania będzie przypisywać.

Wiem, mogę takie coś zrobić po stronie php, i wtedy odpowiednio posortować, ale wiążę się to z napisałem sporego kawałka kodu, dlatego pytam się, czy można coś takiego zrobić samym zapytaniem do mysql.
tommy4
A czemu CAST(... AS UNSIGNED) nie działa tak jakbyś oczekiwał?
elektrrrus
W polu, które zaczyna się od litery zwraca 0.
Na zawartość pola: "od 40 do 100", zwraca "0"
ShadowD
Zawsze możesz pobrać pierwszy znak i określić czy jest liczbą jak rak to zapisujesz do zmiennej następnie sprawdzasz drugi jak jest to zapisujesz i trzeci jak nie jest to kończysz przeszukiwanie.

Przykład:
qw12eqwq

1. Sprawdza pierwszą - 0
2. Sprawdza drugą - 0
3. Sprawdza trzecią - 1 (1) zapisuje do zmiennej
4. Sprawdza czwartą - 1 (2) dopisujesz do zmiennej
5. Sprawdza piątą - 0
6. Koniec ponieważ po liczbie nastąpił znak który nie jest liczbą

Mój pomysł, może lekko dziwny ale to nic... winksmiley.jpg
elektrrrus
O kurcze smile.gif
Aż tak dobry to ja z sql nie jestem, ale popatrze jak się robi procedury w mysql, może coś mi z tego wyjdzie.
Tylko teraz inny problem, co będzie szybsze, czy procedura w mysql, czy pobranie wszytskiego i przemielenie tego po stronie php?
ShadowD
Osobiście nie lubię sql i wszystko co mogę wykonuję po stronie php oczywiście bez przesady...

A z prędkością z tego co wiem to różnie bywa w zależności od tego co chcesz uzyskać i w jaki sposób napiszesz zapytanie...
elektrrrus
Spróbuje napisac i w jeden i drugi sposób, zobaczymy co będzie szybsze...
Dzięki za pomoc i wskazówki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.