0
votes

Comment convertir une valeur de colonnes en utilisant SQL sur MySQL?

J'ai une table nommée employée dans ma base de données, la structure est indiquée ci-dessous: xxx

J'ai des données que je veux masquer, par exemple +7845690001 to +7845690 *** . Version complète comme ci-dessous. xxx

J'ai réussi à le faire pour le nom et le téléphone: xxx

Comment puis-je faire cela pour email?


4 commentaires

J'ai atteint un téléphone en utilisant ceci. Concat (milieu (téléphone, 1, longueur (téléphone) - 3), '***') comme téléphone_new


"J'ai besoin" n'est pas une question. Modifier Votre message Ajoutez ce que vous avez essayé et une explication Qu'est-ce qui s'est mal passé avec elle et où exactement vous avez besoin d'aide.


@sticky Bit, j'ai ajouté ce que je l'ai essayé en commentaire. Vérifiez s'il vous plaît.


MySQL version 8 a regex_replace (), mais les versions antérieures ne le font pas. Quelle version utilise-tu? S'il vous plaît Modifier Votre question vous permet de savoir.


4 Réponses :


0
votes

Vous pouvez utiliser Concat Concat Strong> et SUBSTRING STROND> FONCTIONS DANS MYSQL. L'e-mail et le nom ont la même fonctionnalité, utilisez la même chose pour nom et modifier les chiffres basés sur votre exigence.

SELECT CONCAT(LEFT(`name `,1),LPAD(RIGHT(`name `,1),LENGTH(`name `)-1,'*')) FROM `test4` 


5 commentaires

Ca ne fonctionne pas. Je veux exact * pour le caractère. Jonney = j **** y, comme ça.


Il a changé en fonction de votre exigence.


N'utilisez pas le même caractère * par votre nom, il fournit des informations à votre lecteur. Utilisez un caractère fixe * comme une autre application préoccupée par la sécurité.


Oui, je comprends mais je veux exactement même. :)


@ user14059282 J'ai édité la réponse pour le nombre exact de * au lieu de caractères. Mais faites attention à cette méthode peut donner des informations aux pirates.



0
votes

Vous pouvez travailler avec les fonctions de chaîne de MySQL: gauche () , droite () , longueur () , répéter () et substrant_index () .

Je vais le faire pour email : xxx


0 commentaires

0
votes

a finalement trouvé la réponse:

Select CONCAT(MID(phone, 1, LENGTH(phone) - 3), '***') as new_phone,
CONCAT(LEFT(name,1),REPEAT("*",LENGTH(name)-2),RIGHT(name,1)) as new_name,CONCAT(CONCAT(left(email,1),REPEAT("*",LENGTH(SUBSTRING_INDEX(email, "@", 1))-2),RIGHT(SUBSTRING_INDEX(email, "@", 1),1)),'@',SUBSTRING_INDEX(email,'@',-1)) as new_email from employee


0 commentaires

0
votes

Une regexp_replace peut aussi faire le tour. Voici comment le faire pour l'email : xxx

explication:

(?! ^) Nous assurons que le caractère correspondant est Pas au début de la chaîne et de cette façon, nous ignorons le premier caractère.

. Correspond au personnage à remplacer

(? = [^ @] + @) Nous nous arrêterons à une séquence qui est n'importe quel caractère qui n'est pas @, puis suivi de @.

Chaque caractère qui est assorti entre les deux sera ensuite remplacé par un * (le troisième paramètre) par la fonction.

pour le numéro de téléphone Je vais montrer une solution beaucoup plus simple : xxx

[0-9] {3} correspond exactement à trois chiffres

$ dit qu'ils doivent être à la fin de la chaîne.

Nous les remplacons ensuite avec trois étoiles. Veuillez noter que cette solution suppose que vous stockez toujours les numéros de téléphone d'une manière qu'ils se terminent toujours par trois chiffres. Donc, par exemple, si je saisis un téléphone comme "555-55-55-55", rien ne sera masqué. Si vous n'entrez pas toujours toujours les téléphones normalisés dans le même format, vous devez penser à quelque chose de plus compliqué (comme récupération de chiffres - récupération zéro ou plus non chiffres - récupération du chiffre - récupération zéro ou plus non chiffres - Fetch Digit - Fin de la chaîne , puis remplacez tout ce qui est apparié avec trois * -s). Comme ceci: xxx

ici [0-9] signifie un seul chiffre et [^ 0-9] * signifie zéro ou plus de chiffres. Et bien sûr, la même chose peut être simplifiée en regroupant le chiffre et le zéro ou plus de chiffres dans un groupe qui est ensuite répété trois fois trois fois: xxx

et pour le nom , nous pouvons effectuer ce qui suit: xxx

encore une fois, nous ignorons le premier caractère que de correspondre et remplacez tous les caractères jusqu'à ce que le dernier caractère de la String.

Important: Dans les exemples ci-dessus, nous préservons la longueur des cordes. Si vous souhaitez une anonymie plus élevée, vous pouvez récupérer les données en groupes, puis remplacer un groupe souhaité avec un seul *. Par exemple pour l'e-mail: xxx

Ceci remplacera john@gmail.dom à j*n@gmail.dom et margareth@gmail.dom to m * h @ gmail.dom. Donc, il a également masqué la longueur. Explication:

^ est le début de la chaîne

(.) Est notre premier groupe. Il est un caractère unique

(.) + Est le deuxième groupe. C'est un ou plusieurs caractères.

([^ @] @. +) Est notre troisième groupe. C'est un seul caractère qui n'est pas @, suivi de @, puis suivi d'un ou plusieurs caractères (n'importe où).

Nous remplaçons cela avec \ 1 (le premier groupe), suivi d'un seul *, suivi de \ 3 (le troisième groupe).


0 commentaires