Finden möglich die Duplikate in beiden Spalten ignorieren, Fall-und Sonderzeichen
Abfrage
SELECT COUNT(*), name, number
FROM tbl
GROUP BY name, number
HAVING COUNT(*) > 1
Es manchmal nicht, um Duplikate zu finden zwischen Kleinbuchstaben und Großbuchstaben.
E. g.: sunny
und Sunny
nicht als Duplikate.
So, wie finden Sie alle möglichen Duplikate von PostgreSQL für zwei Spalten.
- Wenn Sie sagen, "Sonderzeichen" meinst du, dass "Weiche" und "$s^o&f!t" gleich zu sein? Oder redest du von Akzentbuchstaben, wo Sie wollen, "Café" und "Café" abgestimmt werden als gleich?
- yup!!! es ist auch eine Möglichkeit
- die? Oder meinst du "beide oben" ?
- "Soft" und "$s^o&f!t" @CraigRinger
Du musst angemeldet sein, um einen Kommentar abzugeben.
lower()
/upper()
Verwenden Sie eine von diesen Falten, Zeichen entweder mit unteren oder oberen Fall. Sonderzeichen sind nicht betroffen:
unaccent()
Wenn Sie wirklich wollen, zu ignorieren, diakritische Zeichen, wie Ihre Kommentare, die implizieren, installieren Sie das Zusatzmodul
unaccent
, die ein text search dictionary entfernt werden, Akzente und auch die Allgemeine Funktionunaccent()
:Macht es sehr einfach:
Ergebnis:
Diese nicht Streifen nicht-Buchstaben. Hinzufügen
regexp_replace()
wie @Craig erwähnt, dass:Ergebnis:
Können Sie selbst bauen einen funktionalen index obendrein:
LIKE
?ILIKE
.~
für einen ähnlichen Zweck wie die MySQL - RLIKE.unaccent
. Nützlich, vor allem da es funktioniert mit tsearch2. Ich denke immer noch die ganze Idee von "unaccenting" ist ziemlich schrecklich, aber wenn Sie fest sind schreckliche Daten, die ich vermute, Sie haben schreckliche Dinge zu tun.group by name having count(name)>1
bekomme ich die DuplikatePostgreSQL standardmäßig die groß - /Kleinschreibung ist. Sie können erzwingen, es werden groß-und Kleinschreibung bei der Suche durch die Umwandlung aller Werte, um einen einzigen Fall:
(Aktualisierte Antwort nach Klärung von Plakat): Die Idee der "unaccenting" oder stripping Akzente (dicratics) ist im Allgemeinen falsch. Es ist OK-ish, wenn Sie entsprechende Daten, um herauszufinden, ob einige fehlgeleitete Benutzer oder eine Anwendung verwurschtelt
résumé
inresume
, aber es ist völlig falsch, sich zu ändern in die andere, wie Sie verschiedene Wörter. Auch dann werde es nur eine Art von Arbeit, und sollte in Verbindung mit einer string-ähnlichkeit matching-system wie Trigramme oder Die Levenshtein-Entfernungen.Die Idee von "unaccenting" setzt Voraus, dass alle Zeichen mit Akzent, hat eine einzige gültige äquivalent unbetont Charakter, oder zumindest, dass eine beliebige Zeichen mit Akzent ersetzt, höchstens mit einem ohne Akzent-Zeichen in ein ascii-zentrale Repräsentation des Wortes. Das ist einfach nicht wahr; in einer Sprache
ö
könnte eine "u" - sound, während in anderen es könnte ein langes "oo" und das "ascii-Varianten" Rechtschreib-Konventionen widerspiegeln könnte, die. Also, in der Sprache, den richtigen "un-Akzentuierung" auf der made-up dummy-Wort "Tapö" könnte "Tapu" und in einem anderen durch dieses gedachte Wort sein könnte, ascii-Varianten zu "Tapoo". In keinem Fall wird die "un-Akzent" in form von "Tapo" übereinstimmen, was die Leute tatsächlich schreiben, wenn gezwungen, in den ascii-Zeichensatz. Wörter mit dicratics können auch ascii-Varianten in ein getrenntes Wort.Können Sie finden Sie diese in englischer Sprache mit Ligaturen, bei denen das Wort
dæmon
ist ascii-Variantendaemon
. Wenn Sie beraubt die Binde, die Sie bekommen würdedmon
was nicht passendaemon
die gemeinsame Rechtschreibung. Das gleiche gilt füræther
ist in der Regel ascii-Varianten zuaether
oderether
. Sie können auch sehen, das im deutschen mit § , in der Regel "erweitert" alsss
.Wenn Sie muss Versuch, "un-Akzent", "normalisieren" Akzente oder "Streifen" Akzente:
Können Sie einen Charakter-Klasse regulären Ausdruck zum strip alle, aber einer angegebenen Menge von Zeichen. In diesem Fall verwenden wir die
\W
escape (Kurzschrift für die Charakter-Klasse[^[:alnum:]_]
als pro-das Handbuch), um auszuschließen, "Symbole", aber keine Zeichen mit Akzent:Wenn Sie möchten, heraus zu filtern, akzentuiert chars auch Sie definieren Ihre eigenen Charakter-Klasse:
Wenn Sie eigentlich gedacht Ersatz einige akzentuierte Zeichen, die für ähnliche unbetont Zeichen, die Sie nutzen könnten
translate
als pro dieser wiki-Artikel: