1

我有一个十进制值说123.77

现在我想使用 MySQL将其转换为相应degree的 , minute,值。second我尝试了几种方法,但无法得到正确的答案。请帮忙。

4

3 回答 3

1

就是这样,

  • 度的整个单位将保持不变(即在经度 121.135° 中,从 121° 开始)。
  • 将小数乘以 60(即 0.135 * 60 = 8.1)。
  • 整数变为分钟 (8')。
  • 取剩余的小数并乘以 60。(即 0.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 演示

在线转换工具(用于检查)

在此处输入图像描述

于 2012-09-19T13:37:43.090 回答
1

John Woo 给出的答案虽然对正值是正确的,但对于负值不会给出正确的结果。我已经调整了他的答案以考虑到这一点。

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
于 2016-04-08T14:42:02.587 回答
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 位。)

于 2017-09-22T04:34:26.687 回答