2009-09-17 8 views
2

Est-il possible de trier une colonne par son nom et d'ignorer les guillemets de certains éléments?Trier par nom, mais ignorer les citations?

Par exemple:

"This is cool"

Un autre article

Article 2

Bonjour

trierait comme:

Un autre article

Article 2

Bonjour

"This is cool"

Les citations sont déjà dans la base de données ...

Répondre

2
SELECT * FROM yourTable ORDER BY TRIM(BOTH '"' FROM title); 
+0

A travaillé magnifiquement! – kylex

+0

Ce sera lent sur les grands ensembles de données! – jor

+0

Pour les besoins plus complexes, une autre option consiste à planifier la table à l'avance pour inclure une colonne dédiée au tri pour contenir une version prétraite de la valeur. Par exemple, stocker 'name =" Dr. Strange Love "' et 'name_sort =" Amour, Strage, Dr. "' – Afilu

1
SELECT * 
FROM table 
ORDER BY CASE WHEN len(col) >= 2 
       THEN REPLACE(LEFT(COL, 1), '"', '') 
       + RIGHT(LEFT(col, LEN(col)-1), LEN(LEFT(col, LEN(col)-1))-1) 
       + REPLACE(RIGHT(col, 1), '"', '') 
       ELSE col 
     END 

dans le ORDER BY, je éliminer les guillemets en les remplaçant 'dans' & derniers caractères par ''. Bien sûr, ce n'est valide que lorsque la longueur de col> = 2.

5

Dépend de la langue que vous utilisez. En MS SQL, j'utilise la commande REPLACE. Donc, si j'ai une table, les utilisateurs, avec une première colonne nom que je vous triez par, je fais ce qui enlève toutes les guillemets doubles de la chaîne:

SELECT  * 
FROM   dbo.Users 
ORDER BY REPLACE(firstName, '"', '') 
+0

REPLACE supprimera tous les guillemets du nom. –

+2

Vous avez raison. Mais il ne le supprime que lors du tri, pas à partir des données elles-mêmes. Il semble que Kylex veut juste tout trier sans les guillemets. donc cela va trier des choses comme: Ar ticle 3 Mauvais exemple, mais c'est tout ce que je peux penser en ce moment.Chaque façon, car il n'affecte pas les données retournées, je ne pense pas qu'il y aura un problème – JohnathanKong

+0

Mais cela n'affecte-t-il pas l'ordre de tri d'une manière ou d'une autre? –

0
SELECT name 
FROM myTable 
ORDER BY replace(name, '"', '') 
3

Un truc qui peut être acceptable, et plus rapide que la solution basée sur TRIM() ou REPLACE() est de se concentrer uniquement sur le premier caractère étant une citation (ou par extension un caractère non alphanumérique).

ORDER BY CASE LEFT(myCol, 1) 
     WHEN '"' THEN REPLACE(myCol, '"', '') 
     ELSE myCol 
    END CASE 

En général, pour ensemble de données plus, ce type de traitement doit se faire au moment de la charge, par exemple avec l'ajout de colonnes pour effectuer des requêtes fins, par opposition aux colonnes à des fins d'affichage.

Questions connexes