2010-08-19 6 views
2

J'ai un champ qui contient des titres d'article. J'ai besoin de créer une URL sympa ou jolie sur les titres de l'article.Sql manipulation de chaîne dans la procédure stockée

J'ai besoin d'aide pour manipuler la chaîne avec SQL. Cela doit être fait dans une procédure stockée ou une fonction.

Les exigences: Les seuls caractères autorisés sont les lettres minuscules et les chiffres (a-z et 0-9) Tous les espaces doivent être remplacés par des tirets.

Merci!

(mise à jour) J'utilise Sql Server 2008

+2

Quelle base de données et quelle version? –

+0

Je ne pense pas que ce serait une bonne idée car vous pourriez vous retrouver avec des éléments différents ayant la même URL. Et en tenir compte dans une procédure stockée compliquerait considérablement la logique. Peut-être que le faire en dehors de votre base de données serait une meilleure option, si vous allez le faire souvent (par exemple sur la sélection ou l'insertion), ou une fois. – Mhmmd

+0

@OMG Ponies Sql Server 2008 @ShaderOp J'ai déjà la fonctionnalité en place pour prendre soin des doublons. Je prévoyais de faire toutes les manipulations avant d'insérer les données mais, il s'avère que la plupart des données sont déjà insérées dans la base de données – donxythe

Répondre

0

Pour vérifier les lettres minuscules, vous pouvez utiliser un classement binaire comme Latin1_General_BIN.

Cette procédure SQL Server vérifie si une chaîne contient uniquement des espaces, des chiffres ou des minuscules. Si c'est le cas, il renvoie 1 et remplace les espaces par des traits de soulignement. Sinon, il renvoie -1.

if OBJECT_ID('TestProc') is null 
    exec ('create procedure TestProc as select 1') 
go 
alter procedure TestProc(
    @str varchar(256), 
    @result varchar(256) output) 
as 
begin 
set @result = null 
set @str = REPLACE(@str,' ','_') 
if @str like '%[^0-9a-z_]%' collate Latin1_General_BIN 
    return -1 
set @result = @str 
return 1 
end 
go 

données de test:

declare @rc int 
declare @result varchar(256) 
exec @rc = TestProc '11 aa', @result out 
select @rc, @result 
exec @rc = TestProc 'NO CAPS', @result out 
select @rc, @result 
exec @rc = TestProc '%#$#$', @result out 
select @rc, @result 

->

1   11_aa 
-1   NULL 
-1   NULL 
1

J'ai trouvé la réponse ici. Merci à tous! How to strip all non-alphabetic characters from string in SQL Server?

CREATE Function [dbo].[create_pretty_url](@Temp VarChar(1000))

Returns VarChar(1000)

AS Begin

While PatIndex('%[^A-za-z0-9]%', @Temp) > 0 
    Set @Temp = LOWER(Stuff(@Temp, PatIndex('%[^A-za-z0-9]%', @Temp), 1, '')) 

Return @Temp 

End

+0

Woops. parlé à bientôt. Je dois d'abord remplacer les espaces par des tirets ... des idées? – donxythe

+0

Définir @Temp = (Stuff (@Temp, PatIndex ('% [^ A-za-z0-9]%', @Temp), 1, '')) Définir @Temp = Remplacer (LOWER (@Temp) , '', '-') – donxythe