Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: natural order
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
DeyV
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
dr_bonzo
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
DeyV
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.
SongoQ
@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.
DeyV
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...
SongoQ
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
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.