某表a (a double)
1
1.3
1.2
0.5666
1.2345....
取某个字段小数点后面超过3位的字段值的sql,如何写
(执行这个sql
将仅仅取上面的数据
0.5666
1.2345其他的不要)
(mysql +linux)
1
1.3
1.2
0.5666
1.2345....
取某个字段小数点后面超过3位的字段值的sql,如何写
(执行这个sql
将仅仅取上面的数据
0.5666
1.2345其他的不要)
(mysql +linux)
+--------+
| a |
+--------+
| 1 |
| 1.3 |
| 1.2 |
| 0.5666 |
| 1.2345 |
+--------+
5 rows in set (0.00 sec)mysql> select * from t_liyihongcug
-> where ROUND(a,3)!=a;
+--------+
| a |
+--------+
| 0.5666 |
| 1.2345 |
+--------+
2 rows in set (0.00 sec)mysql>当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
where LENGTH(a)-LOCATE('.', a) >3
-> where ROUND(a,3)!=a;
有时候不准确。 不知道真么回事
where LENGTH(a)-LOCATE('.', a) >3 查找出数据为空
但where ROUND(a,3)!=a;
查处数据还有值 但他的值都是 1.97 2.78 等不符合要求的数据。 (所以最终我选择了后者)
where ROUND(a,3)!=a;
查处数据还有值 但他的值都是 1.97 2.78 等不符合要求的数据?是什么原因 (是否该数据默认不足5为
如1.97 实际上是 1.97000 这样存储的? ?)
mysql> select * from t_liyihongcug;
+--------+
| a |
+--------+
| 1 |
| 1.3 |
| 1.2 |
| 0.5666 |
| 1.2345 |
| 1.97 |
| 2.78 |
+--------+
7 rows in set (0.00 sec)mysql> select * from t_liyihongcug where ROUND(a,3)!=a;
+--------+
| a |
+--------+
| 0.5666 |
| 1.2345 |
+--------+
2 rows in set (0.00 sec)mysql> desc t_liyihongcug;
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| a | double | YES | | NULL | |
+-------+--------+------+-----+---------+-------+
1 row in set (0.06 sec)mysql>
但是我的where LENGTH(a)-LOCATE('.', a) >3 适合任何情况 。
---这是精确的结论
ROUND(a,3)!=a; 为什么不能对float 起作用 , ???
说明mysql的函数的使用 要很谨慎。
2。建议注意你的结帖率:70.83%
3。不是函数的问题,是数据精度的问题。float 只有4字节,而double有8字节,任何一种浮点数都有精度损失。http://dev.mysql.com/doc/refman/5.1/zh/precision-math.html
24. 精度数学
24.1. 数值的类型
24.2. DECIMAL数据类型更改
24.3. 表达式处理
24.4. 四舍五入
24.5. 精度数学示例
+--------+
| a |
+--------+
| 1 |
| 1.3 |
| 1.2 |
| 0.5666 |
| 1.2345 |
| 1.97 |
| 2.78 |
+--------+
7 rows in set (0.00 sec)mysql> select * from t_liyihongcug_b where ROUND(CAST(a AS DECIMAL(10,5)) ,3)!=CAST(a AS DECIMAL(10,5)) ;
+--------+
| a |
+--------+
| 0.5666 |
| 1.2345 |
+--------+
2 rows in set (0.00 sec)mysql>