PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Alfanumeryczne sortowanie z uwzględnieniem wielkości liter w postgres

Mój PostgreSQL sortuje tak, jak chcesz. Sposób, w jaki PostgreSQL porównuje ciągi znaków, zależy od ustawień regionalnych i sortowania. Kiedy tworzysz bazę danych za pomocą createdb jest -l możliwość ustawienia języka. Możesz również sprawdzić, jak jest skonfigurowany w twoim środowisku, używając psql -l :

[[email protected]]$ psql -l
List of databases
 Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
---------+----------+----------+------------+------------+-----------------------
 mn_test | postgres | UTF8     | pl_PL.UTF8 | pl_PL.UTF8 |

Jak widzisz, moja baza danych używa sortowania po polsku.

Jeśli utworzyłeś bazę danych przy użyciu innego sortowania, możesz użyć innego sortowania w zapytaniu, tak jak:

SELECT * FROM sort_test ORDER BY name COLLATE "C";
SELECT * FROM sort_test ORDER BY name COLLATE "default";
SELECT * FROM sort_test ORDER BY name COLLATE "pl_PL";

Możesz wyświetlić dostępne zestawienia według:

SELECT * FROM pg_collation;

EDYTOWANO:

Och, przegapiłem, że „a11” musi być przed „a2”.

Nie sądzę, że standardowe sortowanie może rozwiązać sortowanie alfanumeryczne. Do takiego sortowania będziesz musiał podzielić ciąg na części, tak jak w odpowiedzi Clodoaldo Neto. Inną opcją, która jest przydatna, jeśli często musisz zamawiać w ten sposób, jest rozdzielenie pola nazwy na dwie kolumny. Możesz utworzyć wyzwalacz podczas INSERT i UPDATE, który podzieli name w name_1 i name_2 a następnie:

SELECT name FROM sort_test ORDER BY name_1 COLLATE "en_EN", name_2;

(Zmieniłem sortowanie z polskiego na angielski, powinieneś używać swojego rodzimego sortowania do sortowania liter, takich jak aącć itp.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak to_char() działa w PostgreSQL

  2. PostgreSQL - klauzula GROUP BY

  3. Kolejność według daty, dodaj datę przed i datę po postgresql z podzapytanie

  4. Termin składni SQL dla „GDZIE (col1, col2) <(val1, val2)”

  5. GdzieRaw Laravel ze zmienną