Hashing einer Zeichenfolge in PostgreSQL zu einem numerischen Wert
Brauche ich zum Konvertieren von Strings gespeichert in meine Datenbank mit einem Numerischen Wert. Ergebnis kann sein, Integer (bevorzugt) oder Bigint. Diese Umwandlung ist zu sein getan auf der Datenbank-Seite in einer PL/pgSQL-Funktion.
Kann jemand bitte zeigen Sie mir einige Algorithmus oder ein API verwendet werden können, um dies zu erreichen?
Habe ich die Suche im Google seit Stunden jetzt, könnte nicht finden, alles, was nützlich ist so weit 🙁
InformationsquelleAutor der Frage Salman A. Kagzi | 2012-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur die ersten 32 bits oder 64 bits des MD5-hash. Natürlich, es hebt die wichtigste Eigenschaft von md5 (=die Wahrscheinlichkeit der Kollision wird verschwindend gering), aber du wirst immer noch eine Breite Streuung der Werte, die vermutlich gut genug für Ihr problem.
SQL-Funktionen, abgeleitet aus den anderen Antworten:
Für bigint:
Für int:
InformationsquelleAutor der Antwort Daniel Vérité
Können Sie erstellen, die mit einer md5-hash-Wert ohne Probleme:
Diese gibt einen string mit hex-Zahl.
Leider gibt es keine integrierte Funktion zum konvertieren von hex zu integer aber wie Sie tun, dass in PL/pgSQL sowieso, das könnte helfen:
https://stackoverflow.com/a/8316731/330315
InformationsquelleAutor der Antwort a_horse_with_no_name
Muss es ein integer sein? Die pg_crypto - Modul bietet eine Reihe von standard-hash-Funktionen (md5, sha1, etc). Sie alle kehren bytea. Ich nehme an, Sie könnten wegwerfen einige bits und konvertieren bytea integer.
bigint ist zu klein zum speichern eines kryptografischen hash. Der größte non-binary-Typ bytea Pg unterstützt wird die uuid. Sie wirken könnte-digest zu uuid wie diese:
InformationsquelleAutor der Antwort dbenhur