![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 24.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pewien nietypowy problem i nie wiem jak go "ugryźć", zaprezentuje na przykładzie o co mi chodzi. Mam a bazie kilka rekordów, zapisanych np. tak:
To co muszę wydobyć to maksymalna wartość numeru pomiędzy A/.../2012. Wiem jak wyświetlić (czyli ograniczyć) wyniki do tego czego szukam, ale nie wiem jak zastosować funkcję MAX() w SELECIE by wyświetlał to czego poszukuję. Przykładowo...
...nie zadziała bo zamiast MAX(Numer) musiałbym tutaj zamiast "Numer" wprowadzić jakiś warunek który spowoduje branie pod uwagę tylko tego numeru znajdującego się wewnątrz ciągu, a nie całego ciągu. Dodam że długość ciągu oraz numeru może być różna (dla przykładu jest A/.../2012, ale moż być też np. XYZ/......../2013, itp), dlatego na sztywno nie da się tego określić funkcją SUBSTR(). Ma ktoś pomysł jak mogę wyświetlić maksymalny numer zawierający się w tym przykładzie między A/..../2012 ? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 476 Pomógł: 96 Dołączył: 10.04.2008 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Nie zadziała z substring?
PS. Nie doczytałem o różnej długości... Ten post edytował pitu 24.11.2012, 22:07:04 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 24.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie, nie może to być na "sztywno", więc SUBSTRING() odpada ;-(
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
Trochę naokoło ale powinno działać: http://bytes.com/topic/mysql/answers/510254-order-regex
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 24.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
a tak
Heja, Przeanalizowałem Twój kod i jest bardzo zbliżony do tego co chce osiągnąć - ogólnie prawie wszystko jest OK, jest tylko jeden duuuuży problem, nie wiedzieć czemu funkcja MAX() nie działa jak powinna. Zamiast porównywać całe wydobyte liczby to porównuje tylko pierwszy ich znak. Przykładowo mając: A/7/2012, A/33/2012 i A /252/2012 - jako MAX pokaże 7. Gdy zmienię A/7/2012 na np. A/1/2012 to pokazuje jako MAX liczbę 33 - a powinno we wszystkich przypadkach pokazać 252. Może jakoś trzeba by zdeklarować typ danych bo funkcja nie potrafi rozpoznać że to są liczby? --------------- Zmieniłem trochę kod, by wyrzucił mi posortowane wyniki i uzyskałem niestety ten sam problem co przy użyciu funkcji MAX(), przykład:
Wynik: 7 33 152 1 03 A powinno przecież być: 152 33 7 1 03 Zgłupiałem już... ;/ Ten post edytował poldo 26.11.2012, 00:59:15 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj rzucić tą liczbę którą wyciągasz na liczbę - zapoznaj się z CAST
Może on Ci stringi porównuje po prostu. -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 24.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tak, mam wrażenie że on porównywał stringi - w każdym razie dzięki sazian i Sephirus - udało się w końcu z waszą pomocą ;-)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 00:06 |