Comment est-ce que vous pourriez supprimer tous les caractères non alphabétiques d’une chaîne ?
Qu’en est-il non alphanumérique ?
Cela doit-il être une fonction personnalisée ou y a-t-il aussi des solutions plus généralisables ?
Comment est-ce que vous pourriez supprimer tous les caractères non alphabétiques d’une chaîne ?
Qu’en est-il non alphanumérique ?
Cela doit-il être une fonction personnalisée ou y a-t-il aussi des solutions plus généralisables ?
Essayez cette fonction :
Appelez-le comme ceci :
Une fois que vous comprenez le code, vous devriez voir que c’est relativement simple de le changer pour supprimer les autres personnages, trop. Vous pourriez même faire cela assez dynamique pour passer dans votre modèle de recherche.
Elle pourra être qu'utile.
Version paramétrable de Mastros G' réponse génial:
Alphabetic uniquement :
Numérique uniquement :
Alphanumérique uniquement :
Non alphanumériques :
Je savais que SQL a été mauvais lors de la manipulation de la chaîne, mais je ne pensais pas que ce serait aussi difficile. Voici une fonction simple de supprimer tous les numéros à partir d'une chaîne. Il y aurait de meilleures façons de le faire, mais c'est un début.
CREATE FUNCTION dbo.AlphaOnly (
@String varchar(100)
)
RETURNS varchar(100)
AS BEGIN
RETURN (
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
@String,
'9', ''),
'8', ''),
'7', ''),
'6', ''),
'5', ''),
'4', ''),
'3', ''),
'2', ''),
'1', ''),
'0', '')
)
END
GO
-- ==================
DECLARE @t TABLE (
ColID int,
ColString varchar(50)
)
INSERT INTO @t VALUES (1, 'abc1234567890')
SELECT ColID, ColString, dbo.AlphaOnly(ColString)
FROM @t
Sortie
ColID ColString
----- ------------- ---
1 abc1234567890 abc
Ronde 2 - Piloté Par Les Données De La Liste Noire
-- ============================================
-- Create a table of blacklist characters
-- ============================================
IF EXISTS (SELECT * FROM sys.tables WHERE [object_id] = OBJECT_ID('dbo.CharacterBlacklist'))
DROP TABLE dbo.CharacterBlacklist
GO
CREATE TABLE dbo.CharacterBlacklist (
CharID int IDENTITY,
DisallowedCharacter nchar(1) NOT NULL
)
GO
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'0')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'1')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'2')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'3')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'4')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'5')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'6')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'7')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'8')
INSERT INTO dbo.CharacterBlacklist (DisallowedCharacter) VALUES (N'9')
GO
-- ====================================
IF EXISTS (SELECT * FROM sys.objects WHERE [object_id] = OBJECT_ID('dbo.StripBlacklistCharacters'))
DROP FUNCTION dbo.StripBlacklistCharacters
GO
CREATE FUNCTION dbo.StripBlacklistCharacters (
@String nvarchar(100)
)
RETURNS varchar(100)
AS BEGIN
DECLARE @blacklistCt int
DECLARE @ct int
DECLARE @c nchar(1)
SELECT @blacklistCt = COUNT(*) FROM dbo.CharacterBlacklist
SET @ct = 0
WHILE @ct < @blacklistCt BEGIN
SET @ct = @ct + 1
SELECT @String = REPLACE(@String, DisallowedCharacter, N'')
FROM dbo.CharacterBlacklist
WHERE CharID = @ct
END
RETURN (@String)
END
GO
-- ====================================
DECLARE @s nvarchar(24)
SET @s = N'abc1234def5678ghi90jkl'
SELECT
@s AS OriginalString,
dbo.StripBlacklistCharacters(@s) AS ResultString
Sortie
OriginalString ResultString
------------------------ ------------
abc1234def5678ghi90jkl abcdefghijkl
Mon défi pour les lecteurs: Pouvez-vous à le rendre plus efficace? Que penser de l'utilisation de la récursivité?
Si vous êtes comme moi et que vous n’avez pas accès à un peu ajouter des fonctions à votre production données mais toujours souhaitez effectuer ce type de filtrage, voici une solution pure de SQL à l’aide d’un tableau croisé dynamique pour mettre les morceaux filtrées à nouveau ensemble.
N.-b. J’ai codé en dur la table jusqu'à 40 caractères, vous devrez en rajouter si vous avez des chaînes plus longues pour filtrer.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.