Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> natural order
DeyV
post
Post #1





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Jakiego należy użyć operatora w sortowaniu, by kolumna znakowa została posortowana w "naturalnym porządku" tj.
Cytat
1
2
3
12
14
21


a nie, tak jak jest to domyślnie:
Cytat
1
12
14
2
21
3


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Moze daj konwersje do integera przed sortowaniem (ale nie wiem czy cos takiego istnieje)
pseudojezyk:
  1. SELECT intVal( kolumna ) AS X
  2. FROM tabela ORDER BY X ASC


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
DeyV
post
Post #3





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




w ostateczności można i tak, choć wolałbym tego uniknąć, ponieważ ta kolumna zawiera dane typu
12/123/4324
i chciałbym mieć to posortowane do końca poprawnie.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


@dr_bonzo rzutowanie robisz w ten sposob pole::typ

  1. SELECT kolumna::int4 AS X
  2. FROM tabela ORDER BY X ASC


lub

  1. SELECT kolumna
  2. FROM tabela ORDER BY kolumna::int4 ASC


Jesli rzutujesz z varchar to powinien wywalic blad. Sortowanie mozesz ustawic chyba w konfigu, kiedys ten temat byl na forum poruszony. Jesli nie znajdziesz wiem ze cos bylo na ten temat w manualu do pgadmina.

@DeyV Jesli dane sa w takiej postaci to mozna by sie skusic np na jakas funkcyjke ktora np konwertuje do postaci do posortowania.

Ten post edytował SongoQ 27.06.2005, 14:38:47


--------------------
Go to the top of the page
+Quote Post
DeyV
post
Post #5





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




1. pisanie funkcji nie jest możliwe
2. rzutowanie nie rozwiąże mojego problemu
3. problem rozwiązuje ustawienie lokalizacji bazy danych - wraz z obsługą sortowania po polskich znakach (przynajmniej według depesza) powino zachowywać również porządek naturalny podczas sortowania liczb.

Nadal jednak pozostaje pytanie - czy możliwe jest, zamiast zmian konfiguracji bazy - skorzystanie z jakiegoś własnego operatora...


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Z tego co znalazlem to niestety nie ma takiej mozliwosci, niestety musisz ustawic
LC_COLLATE.

Ja to wykombinowalem tak i dziala.

  1. SELECT substring(a, 1, position('/' IN a) - 1)::int4 AS s
  2. FROM testaa ORDER BY s


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:08