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位。)您尝试了哪些方法?该值是以弧度、小数度、梯度还是其他单位表示的?