Comment détecter les nombres dans la string dans de nombreuses observations?

Je voudrais détecter tous les nombres du nom pour gagner l'identification. J'utilise ce code:

select Name, ID from [my_table] where [Name] like ('%000234%') 

Mais j'ai besoin de travailler pour de nombreux noms. J'ai essayé Nom comme dans (000234, 000235, …), mais cela ne fonctionne pas. est-il possible de gagner toute la list des IDs recherchant par noms?

Si vous souhaitez sélectionner des noms pour une plage de nombres spécifique

 select Name, ID from [my_table] where [Name] like '%00023[4-9]%' 

Qui cherchera les noms 000234000239

Pour d'autres references generics

Insérer des données dans la table temporaire Ensuite, vous pouvez le merge avec la table principale.

 DECLARE @TempTable TABLE (TempName NVARCHAR(10)) INSERT INTO @TempTable VALUES ('000234'), ('000235') SELECT A.Name, A.ID FROM [my_table] A INNER JOIN @TempTable B ON A.Name LIKE '%' + B.TempName + '%' 

Ajout d'un tableau de test pour plus de clarté.

 CREATE TABLE #Test ( NameSsortingng varchar(25) ) INSERT INTO #Test (NameSsortingng) SELECT 'Mike387592' UNION ALL SELECT 'Nancy2387' UNION ALL SELECT 'Tim0088297234' WITH CTE AS ( SELECT NameSsortingng ,PATINDEX('%[0-9]%', NameSsortingng) AS [Start] ,LEN(NameSsortingng) AS [End] FROM #Test ) SELECT NameSsortingng ,SUBSTRING(NameSsortingng, [Start], [End]) FROM CTE 

Si vous avez une série de noms dans une table qui ont des nombres non consécutifs qui n'ont pas de motif partagé entre eux, une façon de rassembler ces données est d'utiliser un prédicat IN et de build dynamicment votre requête.

EG Vous voulez des noms avec les numéros 000412, 001523 et 001687.

Vous générez dynamicment une requête comme celle-ci:

 SELECT Name, ID FROM [my_table] WHERE Name IN ( '000412', '001523', '001687' ) 

Les requêtes dynamics peuvent être générées à partir de la database ou par le logiciel appelant vers la database, mais sont principalement déconseillées car elles constituent une menace pour la security et ne sont pas réutilisables. Néanless, ceci est une option.

Si vous devez utiliser le prédicat LIKE parce qu'il y a d'autres caractères autour de votre string numérique, quelque chose comme ceci serait la requête générée:

 SELECT Name, ID FROM [my_table] WHERE Name LIKE '%000412%' OR Name LIKE '%001523%' OR Name LIKE '%001687%'