2016-08-16 72 views
1

我將緯度作爲數字存儲在表中(示例18.1659)。我正在使用合併語句將該數據轉移到另一個表中。除數據外的所有作品僅作爲「18」輸入到新表中。這兩個字段都是數字,我認爲這是Firebird中的確切數字。我怎樣才能解決這個問題,並將所選數據確切地輸入到新字段中。這是我使用的SQL。在Firebird中的合併語句中獲取數字精度

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 

我已經嘗試使用鑄造作爲雙精度,但也沒有工作。如果我明白爲什麼會發生這種情況,我可能會找出解決方案,但我甚至不知道爲什麼。感謝

方言3 TABLE:公證 字段:LAT NUMERIC(18,0) LNG NUMERIC(18,0)

TABLE:ZIP_CODES 字段:LAT NUMERIC(18,5) LNG NUMERIC( 18,5)

+0

請將您的數據庫的SQL方言和您使用的兩張表的聲明(方案)添加到主題 –

+0

個人我只是將所有緯度存儲爲Int64乘以千之後:-) –

+0

也沒有點在那裏使用派生表,這錯過了MERGE命令的整個想法。 http://firebirdsql.su/doku.php?id=merge剛剛去'使用公式n合併成n公式n.zip = z.zipcode ......' –

回答

2

當我編輯我的問題時,我回答了我自己的問題。我沒有意識到公證表中我的數字被設置爲(18,0)。一旦我將它們改爲(18,5),它們都應該如此。

+0

仍然更好地解開你的MERGE命令,沒有必要用很多單行請求來減慢服務器的速度而不是單個請求 –

+0

謝謝,我只需要使用它一次就可以在本地傳輸一些數據。 –

+1

其實我最終使用的是'合併成公證書 使用zip_codes z 在n.zip = z.zipcode 匹配時,然後 更新集n.lat = z.lat' –