Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL如何将十进制值转换为度、分、秒_Mysql_Sql - Fatal编程技术网

MySQL如何将十进制值转换为度、分、秒

MySQL如何将十进制值转换为度、分、秒,mysql,sql,Mysql,Sql,我有一个十进制值,比如说123.77 现在我想使用MySQL将其转换为相应的度,分,秒值。 我试过几种方法,但都找不到正确的答案。请帮忙。以下是如何 整个度数单位将保持不变(即在121.135°经度范围内,从121°开始) 将小数点乘以60(即135*60=8.1) 整数变成分钟(8') 取剩余的十进制数乘以60。(即,1*60=6) 结果数字变成秒(6“)。秒可以保留为十进制 使用度(°)、分(')和秒(“)(即121°8'6”经度)的符号,将三组数字放在一起 质疑, SET @deci

我有一个十进制值,比如说
123.77

现在我想使用MySQL将其转换为相应的
值。 我试过几种方法,但都找不到正确的答案。请帮忙。

以下是如何

  • 整个度数单位将保持不变(即在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


吴宇森给出的答案虽然对正值正确,但对负值不会给出正确的结果。考虑到这一点,我调整了他的答案

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

跳出框框,借用另一种基于巴比伦的度量标准:

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                                                   |
+--------------------------------------------------------------+

(四舍五入是为了避免答案中的小数点后3位。)

您尝试了哪些方法?该值是以弧度、小数度、梯度还是其他单位表示的?