Vergleicht man die zahlen als string in oracle
Habe ich ein Vergleich, die in Oracle für zwei zahlen. 010 und 10.
Sind Sie gleich, so lange als numerische Gleichheit betrifft; allerdings brauche ich, um Sie zu vergleichen als String. Ich habe versucht, to_char aber es funktioniert nicht.
Gibt es andere Funktionen, die würde lassen Sie mich genauen Vergleich der numerische Wert als string?
------------Um zu klären, alle Zweifel---------------------
Ich habe drei Spalten adresse1 Adresse2 und address3
Ich möchte vergleichen, NUR die Ziffern, die in die Verkettung aller drei. so zum Beispiel, wenn die Werte sind wie folgt:
adresse1 = 01 park avenue
address2 = 20 golden gate
address3 = null
dann würde ich das gerne vergleichen, Daten in Tabelle, um zu sehen, wenn eine der Adressen " verkettet mit dem Wert kommt zu werden 0120
Aber jetzt ist es equalizing 120 auch mit 0120, die Wünsche ich nicht.
Daten extrahiert und verkettet, so dass nicht gespeichert wird, in einer Art Spalte. Alles was ich brauche ist, um zu gewährleisten, dass diese zahlen sind im Vergleich "GENAU" und nicht als zahlen.
Bitte vorschlagen.
Cheers
- Welche Spalte Datentyp sind diese zahlen gespeichert? Können Sie schreiben Sie ein kleines Skript, das zeigt das problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist dies, was Sie nach?
Einige Beispiel-Daten:
Hier ist eine Abfrage, die finden 'Duplikate' durch die Bestellung durch die verkettete Reihe string. Wir extrahieren Sie die Nummern, die von der Adresse mit regexp_replace die Adresse Verkettung.
Wenn Sie suchen für Spiele zu einer spezifischen Adresse - probieren Sie etwas wie dieses:
Beispiel:
Du nicht wirklich eine option, hier - Sie sind entweder vergleichen von strings oder zahlen.
wenn in eine Ganzzahl konvertiert alle = 10.
Wenn Sie beginnen mit einem integer-10, Sie haben keine Möglichkeit zu wissen, mit wie vielen führenden Nullen der "string" - version sollte es haben. So speichern Sie alle als strings, oder Sie vergleichen als zahlen - Bedeutung "10" = "010" = "0010" = 10.
Einzig und allein der richtige Weg, um zu überprüfen für genaue übereinstimmungen, wäre
(Ersetzen Sie bind-Variablen oder anderen Spalten sind für die einprogrammierte Werte nach Geschmack).
Die Tatsache, dass Sie ignorieren diese offensichtliche Lösung schlägt vor, Sie haben einige motive für den Vergleich von verketteten Zeichenketten, die Sie noch nicht erklärt.
Abstimmung durch die Verkettung ist mühsam, denn Sie sind zu entdecken. Es funktioniert, bieten alle Elemente ausgefüllt sind und eine Feste Länge. Sobald wir die null-Werte zulassen oder variabler Länge, die Werte, die wir dem Untergang geweiht sind. Keiner der folgenden sollte entsprechend auf der Grundlage der Gleichheit der Elemente, aber lo! durch die Magie der Verkettung Sie tun:
Den workaround für dieses problem ist der explizite Abgrenzung der Elemente in der verketteten Zeichenfolge. Wenn wir beispielsweise die Trennung der Elemente, in diesem letzten Beispiel mit Tilden wir nicht mehr ein match...
Sind die Nummern gespeichert, die als varchars in der db? Wenn die zahlen werden gespeichert in integer-Variablen 010 entspricht 10.
zurück 10. Dies bedeutet, dass, sobald Sie gespeichert haben, eine beliebige Anzahl mit führenden Nullen die eine ganze Zahl, die Sie verlieren die führenden Nullen. Man kann nicht zurück, was Sie verloren haben.
Vielleicht habe ich verstanden, Sie falsch, können Sie formulieren Ihre Frage?
Haben Sie ein string-Feld:
Den folgenden wählen zurück 1 Zeile:
Folgende select keine Zeilen zurückgeben:
So, auch wenn das Feld ein string, wenn Sie nur schreiben
=10
in der where-Klausel wird Oracle zu vergleichen als zahlen. Wenn Sie schreiben='10'
Oracle vergleichen Sie als Zeichenfolgen.