Je suis en train de créer des données de démonstration à partir de données contenant des informations sur l'historique du patient (PHI). Il y a quelques colonnes où je veux juste générer une valeur aléatoire qui reste cohérente dans toutes les données. Par exemple, il y a un champ comme SSN dans lequel je souhaite créer un chiffre aléatoire à 9 pour chaque SSN unique, mais en gardant ce numéro le même lorsque les revendications concernent la même personne. Ainsi, 1 SSN peut avoir 5 revendications et chaque revendication aura le même SSN créé au hasard.
sample
RIGHT(convert(NVARCHAR(10), HASHBYTES('MD5', SSN)),10) as SSN
RESULTS:
ëëëï㻣ç èè ¤
final
ssn date1 procedure 856345544 1/1/2019 needle poke 856345544 1/2/2019 needle poke 979583338 1/3/2019 total knee procedure 856345544 1/4/2019 total hip procedure 979583338 1/5/2019 needle poke
Comme vous pouvez le voir, le snn a changé, mais reste le même pour tous cas où le ssn était le même.
Pour des nombres comme celui-ci, je peux convertir en un numérique et multiplier / diviser / ajouter / soustraire pour créer un nombre aléatoire qui maintient l'intégrité, mais comment puis-je gérer cela pour les instances où il n'y a pas de nombres?
J'ai essayé d'utiliser HASHBYTES mais j'obtiens beaucoup de caractères étranges. Existe-t-il une autre méthode qui pourrait générer une valeur aléatoire et maintenir la cohérence dans l'ensemble de l'ensemble de données?
ssn date1 procedure 443234432 1/1/2019 needle poke 443234432 1/2/2019 needle poke 676343522 1/3/2019 total knee procedure 443234432 1/4/2019 total hip procedure 676343522 1/5/2019 needle poke
J'ai lu un certain nombre d'articles à ce sujet, mais je n'ai pas trouvé grand-chose sur le maintien de la cohérence entre plusieurs revendications. J'apprécie vos commentaires.
3 Réponses :
Je ne comprends pas votre problème:
SELECT CAST(HASHBYTES('MD5', N'Wahoooo') AS nvarchar(10))
Cela fonctionne très bien et aura toujours la même valeur. Le problème des caractères brouillés est probablement que vous essayez de convertir une valeur varbinary en nvarchar.
SELECT HASHBYTES('MD5', N'Wahoooo')
Le HASHBYTES renvoie une chaîne, mais même lors de la diffusion avec votre code ci-dessous, j'obtiens ∽ 樾 ꍉ� ῗ ﷄ code>
@MartinBobak HashBytes ne renvoie absolument pas de chaîne. Pourquoi lancez-vous la valeur renvoyée par les hashbytes de toute façon?
Si je comprends votre requête, c'est pour convertir varbinary en varchar, regardez cet article: varbinary en chaîne sur SQL Server
Et vous pouvez essayer ce code:
SELECT RIGHT(CONVERT(VARCHAR(1000), HASHBYTES('MD5', 'SOMEVALUE'), 1),10);
Je pense que vous voulez des caractères imprimables. Dans ce cas, vous pouvez utiliser la fonction CONVERT pour traduire le résultat d'octets d'un HASHBYTES en une représentation hexadécimale sous forme de chaîne. Assurez-vous simplement de passer la valeur 2 comme troisième paramètre.
Original Scrambled BC9EC2E0-2009-45FA-AA95-64585B815BD9 A33AEBC011E9188EB97E 6FF7E0FE-E054-49D7-A451-80111BF5B200 94F93C6A5CBD0E56C70B C8F8CD77-96B7-4B74-84B7-4EB3412C6CE7 2994341068CE8C4E1EF9
Quelques résultats:
DECLARE @SomeValue VARCHAR(100) = CONVERT(VARCHAR(100), NEWID())
SELECT
@SomeValue AS Original,
CONVERT(
VARCHAR(20),
HASHBYTES('MD5', @SomeValue),
2) AS Scrambled
Mettez la longueur que vous voulez comme cible varchar dans le premier paramètre.
Veuillez noter que les fonctions de hachage peuvent générer le même résultat sur différentes entrées, et ce sera particulièrement le cas si vous tronquez le résultat aux N premiers caractères .
cela a fonctionné! Il semble que je manquais le 3ème argument dans la fonction de conversion.
C'est une excellente question. Je rencontre un problème similaire!
Le dernier SSMS (préversion) peut en fait avoir la fonctionnalité que vous recherchez prête à l'emploi: Masquage statique des données (SSMS 18.0 Preview)
Nous utilisons
HASHBYTES ('SHA1', CONVERT (varchar (max), sourceID))depuis un certain nombre d'années avec une cohérence produisant des résultats comme0x166A0DD5 ...... code > que nous utilisons directement