2016-08-16 1 views
1

Ich habe Breitengrad numerisch in einer Tabelle gespeichert (Beispiel 18.1659). Ich verwende eine Merge-Anweisung, um diese Daten in eine andere Tabelle zu übertragen. Alle Arbeiten mit Ausnahme der Daten werden nur als "18" in die neue Tabelle eingegeben. Beide Felder sind numerisch, was ich in Firebird genau fand. Wie kann ich das umgehen und die ausgewählten Daten exakt in die neuen Felder eingeben. Hier ist der Sql, den ich benutzt habe.Numerische Genauigkeit in der Zusammenführungsanweisung in Firebird erhalten

merge into notary n 
    using (select lat from Zip_codes where zipcode = n.zip) z 
    on (n.zip = z.zipcode) 
    when matched then update set lat = z.lat 

Ich habe versucht, Cast als doppelte Genauigkeit, aber das hat auch nicht funktioniert. Wenn ich verstehen würde, warum es passiert, könnte ich wahrscheinlich die Lösung herausfinden, aber ich bin mir nicht einmal sicher warum. Dank

Dialekt 3 TABELLE: NOTARY GEBIETE: LAT NUMERIC (18,0) LNG NUMERIC (18,0)

TABELLE: ZIP_CODES GEBIETE: LAT NUMERIC (18,5) LNG NUMERIC (18,5)

+0

Bitte fügen Sie dem Thema den SQL-Dialekt Ihrer Datenbank und Deklarationen (Schemata) der beiden Tabellen, die Sie verwenden –

+0

persönlich Ich würde nur alle Breiten als Int64 nach multiplizieren sie durch tausend speichern :-) –

+0

auch keinen Punkt dort mit abgeleiteten Tabellen, die den gesamten MERGE-Befehl vermissen. http://firebirdsql.su/doku.php?id=merge Einfach mit 'merge in notary n mit lat z auf n.zip = z.zipcode ......' –

Antwort

2

Als ich meine Frage bearbeitet habe, habe ich meine eigene Frage beantwortet. Ich wusste nicht, dass meine Zahl in der Notar-Tabelle auf (18,0) gesetzt war. Sobald ich sie zu (18,5) änderte, funktionierte alles wie es sollte.

+0

noch besser wickeln Sie Ihren MERGE-Befehl , kein Punkt, Server mit vielen einzeiligen Anfragen zu verlangsamen, anstelle von einzelnem –

+0

Danke, ich brauchte es nur einmal zu verwenden, um einige Daten auf meinem lokalen zu übertragen. –

+1

Eigentlich, was ich am Ende verwendet wurde, war 'in Notar n mit zip_codes z auf n.zip = z.zipcode wenn passed dann update set n.lat = z.lat' fusionieren –

Verwandte Themen