web-dev-qa-db-fra.com

MSSQL Expression régulière

J'ai le REGEX suivant: ^ [- A-Za-z0-9 /.]+$

Ceci vérifie actuellement si la valeur entrée dans une zone de texte correspond à cela. Sinon, cela génère une erreur.

Je dois vérifier si quelque chose est déjà entré dans la base de données qui ne correspond pas à cela.

J'ai fatigué:

 SELECT * FROM *table* WHERE ([url] NOT LIKE '^[-A-Za-z0-9/.]+$') 
 SELECT * FROM *table* WHERE PATINDEX ('^[-A-Za-z0-9/.]+$', [url])

MISE À JOUR

Après quelques recherches, je me suis rendu compte que je ne pouvais pas utiliser REGEXP.

Je pensais que je pouvais faire quelque chose comme ça? Cela ne me donne pas les résultats escomptés mais son fonctionnement ne ressemble à rien d'autre. Quelqu'un peut-il déceler quelque chose qui ne va pas?

SELECT *, 
  CASE WHEN [url] LIKE '^[-A-Za-z0-9/.]+$' 
    THEN 'Match' 
    ELSE 'No Match' 
  END Validates
FROM 
  *table*
17
Clare Barrington

Merci à tous pour votre aide.

C'est ce que j'ai utilisé à la fin:

SELECT *, 
  CASE WHEN [url] NOT LIKE '%[^-A-Za-z0-9/.+$]%' 
    THEN 'Valid' 
    ELSE 'No valid' 
  END [Validate]
FROM 
  *table*
  ORDER BY [Validate]
15
Clare Barrington

Avertissement: La question initiale concernait MySQL. La réponse de SQL Server est ci-dessous.

MySQL

En MySQL, la syntaxe regex est la suivante:

SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$') 

Utilisez la clause REGEXP au lieu de LIKE. Ce dernier est pour la correspondance de modèle en utilisant % et _ caractères génériques.


Serveur SQL

Étant donné que vous avez fait une faute de frappe et que vous utilisez SQL Server (et non MySQL), vous devrez créer une fonction CLR définie par l'utilisateur pour exposer la fonctionnalité regex.

Jetez un oeil à cet article pour plus de détails.

15
Lucas Trzesniewski