2012-09-19 41 views
1

我有一個十進制值說123.77mysql如何十進制值轉換爲度,分,秒

現在我想將其轉換成相應的使用MySQL degreeminutesecond值。 我嘗試了幾種方法,但不能得到正確的答案。請幫忙。

+3

請問是什麼你嘗試過的方法? –

+0

這個值是以弧度,十進制度,漸變還是什麼? – lanzz

回答

1

下面是

  • 度整個單元如何,將保持不變(即,在121.135°經度,開始與121°)。
  • 將小數乘以60(即.135 * 60 = 8.1)。
  • 整個數成爲分鐘(8' )。
  • 取剩餘的十進制數並乘以60.(即.1 * 60 = 6)。
  • 生成的數字變成秒(6「)秒可以保留爲小數
  • 將你的三組數字放在一起,使用度數(°),分鐘(')和秒( 「)(即121°8'6」 經度)

查詢,

SET @deci = 123.77; 
SELECT FLOOR(@deci) Degrees, 

     FLOOR((@deci - (FLOOR(@deci))) * 60) Minutes, 

     ((@deci - (FLOOR(@deci))) * 60 - 
     FLOOR((@deci - (FLOOR(@deci))) * 60)) * 60 SECONDS 

SQLFIDDLE DEMO

Online Conversion Tool (for checking)

enter image description here

0

吳宇森給出的答案,而正確的正值,不會給負值正確的結果。我已經調整了他的答案,以考慮到這一點。

SET @deci = -123.77; 
SELECT SIGN(@deci)* FLOOR(ABS(@deci)) Degrees, 
FLOOR((ABS(@deci) - (FLOOR(ABS(@deci)))) * 60) Minutes, 
((ABS(@deci) - (FLOOR(ABS(@deci)))) * 60 - 
FLOOR((ABS(@deci) - (FLOOR(ABS(@deci)))) * 60)) * 60 SECONDS 
0

開箱,通過借用思考不同的巴比倫爲基礎的指標:

mysql> SELECT TIME_FORMAT("%H°%i'%s", SEC_TO_TIME(ROUND(3600 * -1.234))); 
+-------------------------------------------------------------+ 
| TIME_FORMAT("%H°%i'%s", SEC_TO_TIME(ROUND(3600 * -1.234))) | 
+-------------------------------------------------------------+ 
| -01:14:02             | 
+-------------------------------------------------------------+ 
mysql> SELECT TIME_FORMAT("%H°%i'%s", SEC_TO_TIME(ROUND(3600 * -123.77))); 
+--------------------------------------------------------------+ 
| TIME_FORMAT("%H°%i'%s", SEC_TO_TIME(ROUND(3600 * -123.77))) | 
+--------------------------------------------------------------+ 
| -123:46:12             | 
+--------------------------------------------------------------+ 

(該ROUND是爲了避免讓3位小數的回答)

相關問題