1
是否有任何將度數/分鐘/秒(保存在A列中)轉換爲小數(將保存在新列B中)的SQL腳本?我搜索了現有的解決方案,但所有示例都參考了小數點 - >度/分/秒。我很欣賞任何示例,因爲我在SQL腳本中不夠強大。使用SQL將度/分/秒轉換爲小數
是否有任何將度數/分鐘/秒(保存在A列中)轉換爲小數(將保存在新列B中)的SQL腳本?我搜索了現有的解決方案,但所有示例都參考了小數點 - >度/分/秒。我很欣賞任何示例,因爲我在SQL腳本中不夠強大。使用SQL將度/分/秒轉換爲小數
以下似乎工作:
SELECT DMS, DEGREES + (MINUTES/60) + (SECONDS/(60 * 60)) AS DECIMAL_DEGREES
FROM (SELECT DMS,
TRUNC(DMS) AS DEGREES,
TRUNC((DMS - TRUNC(DMS)) * 100) AS MINUTES,
((DMS * 100) - TRUNC(DMS * 100)) * 100 AS SECONDS
FROM TEST_DMS)
,或者,如果你喜歡把它們當作一個表達式:
SELECT DMS,
TRUNC(DMS) +
(TRUNC((DMS - TRUNC(DMS)) * 100)/60) +
(((DMS * 100) - TRUNC(DMS * 100)) * 100)/(60 * 60) AS DECIMAL_DEGREES
FROM TEST_DMS
至少,這些與我的信賴,生鏽的返回結果一致HP-41C。 :-)
分享和享受。
我工作的一個項目...我用腳本在DMS轉換解決問題上的Oracle數據庫
SELECT
CASE
WHEN LENGTH(longitude)=7 THEN ROUND (cast(substr(longitude, 1, 1) as numeric(10,5)) + cast(substr(longitude, 3, 2) as numeric(10,5))/60 + cast(substr(longitude, 6, 2) as numeric(10,5))/3600,4)
WHEN LENGTH(longitude)=8 THEN ROUND (cast(substr(longitude, 1, 2) as numeric(10,5)) + cast(substr(longitude, 4, 2) as numeric(10,5))/60 + cast(substr(longitude, 7, 2) as numeric(10,5))/3600,4)
ELSE
ROUND (CAST (longitude as Numeric(10,5)),4)
END AS LONGITUDE,
CASE
WHEN LENGTH(latitude)=7 THEN ROUND (cast(substr(latitude, 1, 1) as numeric(10,5)) + cast(substr(latitude, 3, 2) as numeric(10,5))/60 + cast(substr(latitude, 6, 2) as numeric(10,5))/3600,4)
WHEN LENGTH(latitude)=8 THEN ROUND (cast(substr(latitude, 1, 2) as numeric(10,5)) + cast(substr(latitude, 4, 2) as numeric(10,5))/60 + cast(substr(latitude, 7, 2) as numeric(10,5))/3600,4)
ELSE
ROUND (CAST (latitude as Numeric(10,5)),4)
END AS LATITUDE
等待,怎麼都保存在_one_列的三個值?大概這是一個**數學**問題,而不是一個SQL問題。 –
@ X-Zero:不幸的是,它們被保存在一列中,例如, 41.182973。如果度,分和秒會保存在不同的列中,那麼我可以簡單地將分鐘除以60和3600秒。 – Gusgus
41.182973度/分鐘/秒是怎樣的?這就是我期望的十進制。 – stark