-1
votes

MySQL recherche sur un champ mais supprimez tous les caractères non numériques

est-il possible de rechercher une table, mais de préformer le champ de la requête pour ne correspond à des numéros que ... Par exemple, je stocke le numéro de téléphone sous (123) 555-1234

lorsque quelqu'un recherche Comme '% 1235555%' code> Il ne reviendra pas comme vous pouvez le voir. P>

Comment puis-je écrire une requête SQL pour préformer la valeur de champ avant de la chercher ... p>

SELECT * FROM Contacts WHERE FormatFieldHere(phoneNumber) LIKE '%123555%'


2 commentaires

Cela pourrait ne pas être possible dans votre cas d'utilisation, mais pouvez-vous stocker les numéros de téléphone comme une chaîne de numéros ordinaire sans formatage, puis les formater avant la présentation? De cette façon, vos numéros de téléphone seront consultables avec la syntaxe que vous avez donnée ci-dessus.


Stackoverflow.com/a/1794075/2154871 Regardez cette réponse sur la manière de scinder la saisie des utilisateurs, vous le miliez alors. Retour ensemble Application des crochets et Hyen, qui a déclaré que je regarderais changer la façon dont il est stocké pour le rendre plus simple. Enfact, modifier la recherche de sa recherche, forcer l'utilisateur à utiliser deux champs que vous les combinez dans une requête de recherche formatée beaucoup plus facile que la division puis formatage


3 Réponses :


1
votes

Étant donné qu'il n'y a pas une fonction de remplacement de regex dans MySQL fort>, vous pouvez faire ce dont vous avez besoin si vous supprimez tous les caractères non numériques du numéro de téléphone par plusieurs Remplacer () Code> :

SELECT * FROM Contacts 
WHERE replace(replace(replace(replace(phoneNumber, '(', ''), ')', ''), '-', ''), ' ', '') LIKE '%123555%'


0 commentaires

3
votes

Dans MySQL 8.0, vous pouvez utiliser fonction < Code> Regexp_replace () Pour vous débarrasser de tous les caractères non chiffres avant de faire la comparaison, comme: XXX

REGEXP '[^ 0-9 ] ' signifie: tout sauf un chiffre. Avec cette technique, vous n'avez pas besoin d'énumérer expliquer chaque personnage que vous souhaitez ignorer.


0 commentaires

0
votes

Un autre moyen est de créer une colonne virtuelle persistante dans laquelle MySQL automatique stocke le numéro de téléphone normalisé comme celui-ci. Le peut faire avec la fonction de GMB décrit.

Remarque: la fonction de création de la colonne virtuelle est pour Mariadb an, je ne suis pas sûr de la même syntaxe dans MySQL

alors vous pouvez utiliser votre fonction J'aime: xxx

échantillon

Créer une table et insérer des lignes < Pré> xxx

Voir les lignes xxx

Ajouter une colonne virtuelle et un index et voir les nouvelles lignes < / strong> xxx

Ajouter 2 autres lignes de test xxx

Sélectionner sur la nouvelle colonne xxx


0 commentaires