web-dev-qa-db-fra.com

Expressions régulières dans SQL Server

J'ai stocké dans ma base de données des valeurs ressemblant à 5XXXXXX, où X peut être n'importe quel chiffre. En d'autres termes, je dois faire correspondre les chaînes de requête SQL entrantes telles que 5349878

Est-ce que quelqu'un a une idée comment le faire?

J'ai différents cas comme XXXX7XX par exemple, il doit donc être générique. Je me fiche de représenter le motif de manière différente dans SQL Server.

Je travaille avec c # dans .NET.

21
Jack

la valeur stockée dans la base de données est: 5XXXXXX [où x peut être n'importe quel chiffre]

Vous ne mentionnez pas les types de données - si elles sont numériques, vous devrez probablement utiliser CAST/CONVERT pour changer le type de données en [n] varchar.

Utilisation:

WHERE CHARINDEX(column, '5') = 1
  AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
  AND ISNUMERIC(column) = 1

Références:

j'ai aussi différents cas comme XXXX7XX par exemple, il doit donc être générique.

Utilisation:

WHERE PATINDEX('%7%', column) = 5
  AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
  AND ISNUMERIC(column) = 1

Références:

Support Regex

SQL Server 2000+ prend en charge les expressions rationnelles, mais le problème est que vous devez créer la fonction UDF dans le CLR avant de pouvoir le faire. Il existe de nombreux articles fournissant un exemple de code si vous les recherchez sur Google. Une fois que vous avez cela en place, vous pouvez utiliser:

  • 5\d{6} pour votre premier exemple
  • \d{4}7\d{2} pour votre deuxième exemple

Pour plus d'informations sur les expressions régulières, je recommande fortement ce site Web .

19
OMG Ponies

Vous pouvez écrire des requêtes comme celle-ci dans SQL Server:

--each [0-9] matches a single digit, this would match 5xx
SELECT * FROM YourTable WHERE SomeField LIKE '5[0-9][0-9]'
30
dan

Essaye ça

select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'

Bien sûr, vous devrez ajuster la valeur de la sous-chaîne, mais le reste devrait fonctionner ...

6
Sparky

Les caractères génériques SQL suffisent à cette fin. Suivez ce lien: http://www.w3schools.com/SQL/sql_wildcards.asp

vous devez utiliser une requête comme celle-ci:

select * from mytable where msisdn like '%7%'

ou 

select * from mytable where msisdn like '56655%'
0
JCasso

Pour faire correspondre un chiffre, vous pouvez utiliser [0-9]. Vous pouvez donc utiliser 5 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] et [0-9] [0-9] [0-9 ] [0-9] 7 [0-9] [0-9] [0-9]. Je le fais souvent pour les codes postaux.

0
Robert