2008-12-11 8 views
5

Existe-t-il un moyen de trier facilement dans SQL Server 2005 en ignorant les traits d'union dans un champ de chaîne? Actuellement, je dois faire un REPLACE (fieldname, '-', '') ou une fonction pour supprimer le trait d'union dans la clause de tri. J'espérais qu'il y avait un drapeau que je pourrais placer en haut de la procédure stockée ou quelque chose.Tri et des traits d'union SQL

L'accès et le tri par défaut de GridView semblent ignorer les chaînes d'hypertexte.

Répondre

15

j'ai appris quelque chose de nouveau, comme vous aussi

Je crois que la différence entre un « chaîne Tri » vs un « mot Trier » (ne tient pas trait d'union)

différence d'échantillon entre tri WORD et tri des chaînes http://andrusdevelopment.blogspot.com/2007/10/string-sort-vs-word-sort-in-net.html

de Microsoft http://support.microsoft.com/kb/322112

Par exemple, si vous utilisez SQL classement « SQL_Latin1_General_CP1_CI_AS », la chaîne non Unicode « ac » est inférieur à la chaîne « ab », car le trait d'union (« - ») est trié comme un caractère distinct qui précède "b". Cependant, si vous convertissez ces chaînes à Unicode et vous effectuez la même comparaison, la chaîne Unicode-c N'a « est considéré comme supérieur à N'ab » parce que les règles de tri Unicode utilisent un « mot sort "qui ignore le trait d'union.

Je ne quelques exemples de code vous pouvez également jouer avec le COLLATE pour trouver celui de travailler avec votre tri

DECLARE @test TABLE 
(string VARCHAR(50)) 

INSERT INTO @test SELECT 'co-op' 
INSERT INTO @test SELECT 'co op' 
INSERT INTO @test SELECT 'co_op' 

SELECT * FROM @test ORDER BY string --COLLATE SQL_Latin1_General_Cp1_CI_AS 
--co op 
--co-op 
--co_op 

SELECT * FROM @test ORDER BY CAST(string AS NVARCHAR(50)) --COLLATE SQL_Latin1_General_Cp1_CI_AS 
--co op 
--co_op 
--co-op 
+0

fonctionnait très bien, merci! – tidge