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*
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]
Avertissement: La question initiale concernait MySQL. La réponse de SQL Server est ci-dessous.
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.
É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.