Modèle pour tous les caractères spéciaux imprimables

J'ai besoin d'un motif pour tous les caractères spéciaux imprimables. Le model sera utilisé pour la string de filtrage.

DECLARE @Ssortingng NVARCHAR(256) = 'te@st%$#&' -- input -- patern for all printable special characters -- ASCII 33-47, 58-64, 91-96 and 123-126 DECLARE @Pattern NVARCHAR(256)= '%[^ @%$#]%' WHILE PATINDEX(@Pattern, @Ssortingng) > 0 SET @Ssortingng = STUFF(@Ssortingng, PATINDEX(@Pattern, @Ssortingng), 1, '') SELECT @Ssortingng 

–actuel

– input: 'te @ st% $ # &'
– sortie: '@% $ #'

–voulu

– input: 'te @ st% $ # &'
– sortie: '@% $ # &'

– input: 'te @ st% $ # `~ DAS!% ^ 789 * () €'
– sortie: '@% $ # `~!% ^ * ()'

Merci

Bien que ce ne soit pas une solution pure avec un motif, vous pouvez le faire avec une fonction définie par l'user:

 CREATE FUNCTION dbo.RemoveNonDisplayChars(@pSsortingng VARCHAR(8000)) RETURNS VARCHAR(8000) AS BEGIN DECLARE @IncorrectCharLoc SMALLINT, --Position of bad character @Pattern VARCHAR(128) --Bad characters to look for SELECT @Pattern = '%[' + CHAR(0)+CHAR(1)+CHAR(2)+CHAR(3)+CHAR(4) + CHAR(5)+CHAR(6)+CHAR(7)+CHAR(8)+CHAR(9) + CHAR(10)+CHAR(11)+CHAR(12)+CHAR(13)+CHAR(14) + CHAR(15)+CHAR(16)+CHAR(17)+CHAR(18)+CHAR(19) + CHAR(20)+CHAR(21)+CHAR(22)+CHAR(23)+CHAR(24) + CHAR(25)+CHAR(26)+CHAR(27)+CHAR(28)+CHAR(29) + CHAR(30)+CHAR(31)+CHAR(127) + ']%', @IncorrectCharLoc = PATINDEX(@Pattern, @pSsortingng) WHILE @IncorrectCharLoc > 0 SELECT @pSsortingng = STUFF(@pSsortingng, @IncorrectCharLoc, 1, ''), @IncorrectCharLoc = PATINDEX(@Pattern, @pSsortingng) RETURN @pSsortingng END 

Plus d'infos sur ce lien: Supprimer les caractères non imprimables

Si vous voulez supprimer toutes les lettres, lancez le motif avec: '%[az,AZ,' + CHAR(0) + ...