2010-05-27 1 views
1

J'utilise une fonction de tri alphabétique et nécessite une instruction SQL pour renvoyer les enregistrements commençant par une chaîne de longueur variable. Cependant, les enregistrements doivent également être renvoyés s'il existe des points, des espaces ou des tirets entre les caractères de la chaîne. Par exemple, la valeur transmise peut être "M" (facile). Ou "MA" (dans ce cas, il doit retourner les enregistrements commençant par "MA", "M.A", "M A" et "M-A"). Ou "MAA", et ainsi de suite.Instruction de sélection SQL - renvoi d'enregistrements commençant par une chaîne de longueur variable

C'est la déclaration que j'ai jusqu'à présent:

"SELECT * from table where LEFT(name," + value.Length + ")='" + value + "'" 

Mais je ne peux pas trouver comment obtenir pour retourner les résultats où il y a des périodes, des espaces ou des tirets dans name. Toute aide pour construire la déclaration serait géniale.

+0

Ne construisez pas vos chaînes de requête comme ça! Apprenez à utiliser correctement les paramètres. –

Répondre

1

Si vous êtes sur MS SQL Server, vous pouvez utiliser la fonction de remplacement si vous avez un ensemble raisonnablement fini de caractères « spéciaux ». Vous ruinerez l'utilisation de l'index, mais vous le ferez probablement de toute façon. Par exemple:

SELECT 
    name, 
    i_will, 
    never_use, 
    select_star 
FROM 
    My_Table MT 
WHERE 
    REPLACE(REPLACE(REPLACE(name, '.', ''), ' ', ''), '-', '') LIKE @prefix + '%' 

Comme vous pouvez le voir si, la déclaration devient rapidement difficile à manier que vous ajoutez « _ », « (», «) », etc ...

+0

En fait, s'il n'a pas besoin des caractères spéciaux, cela ne ruinera pas complètement l'utilisation de l'index. –

1

Cela ressemble à un travail pour les expressions régulières. Vous pouvez le faire en retournant des enregistrements correspondants dans et en appliquant Regex dans ASP.NET & LINQ ... ou plus efficacement, vous pouvez l'appliquer à votre instruction SQL.

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

+0

Great link ne savait même pas que c'était possible. –

+1

Cette approche nécessite que le CLR soit activé pour la base de données. Cela est correct dans de nombreux cas, mais certains administrateurs de base de données ne le permettent pas. Ils voient cela comme un risque. –

Questions connexes