Mysql:如何在点之后获得每行超过一定数量的小数

时间:2010-11-02 18:10:40

标签: sql mysql

我有一个包含浮点值的表。

+   id   |  value  |
+--------|---------|
+   1    | 19.22   |
+   2    | 32.333  |
+   3    | 1.2332  |
+   4    | 0.22334 |
+   5    | 4.55    |

我想提取点后面包含3位以上小数的每一行。

我期望的结果是:

+   id   |  value  |
+--------|---------|
+   2    | 32.333  |
+   3    | 1.2332  |
+   4    | 0.22334 |

6 个答案:

答案 0 :(得分:5)

value列投射为varchar并使用字符串比较。

答案 1 :(得分:4)

根据您提供的数据,此regex (MySQL 5.0+)对我有用:

SELECT t.* 
  FROM YOUR_TABLE t 
 WHERE t.`value` REGEXP '[0-9]+.[0-9][0-9][0-9]+'

参考:

答案 2 :(得分:4)

这对我有用:

SELECT  *
FROM table
WHERE column <> ROUND (column,2)

或:

SELECT  *
FROM table
WHERE column <> CAST (column AS DECIMAL(36,2))

答案 3 :(得分:3)

这对我有用

SELECT * 
FROM `table` 
WHERE LENGTH(SUBSTR(`value`,INSTR(`value`,"."))) >3

计算小数.01是3,.011是4

答案 4 :(得分:1)

试试这个:

select value, LEN(value) - CHARINDEX('.', value) as DecimalCount from Table
where LEN(value) - CHARINDEX('.', value) > 2

注意:我没有使用mySQL,我有MSSQL。如果这对您有用,请告诉我 - 只是注意到您要求提供mySQL解决方案。

更新:感觉不好回答错误的平台。一些研究让我得到了mySQL:

select * from Table
where LENGTH(SUBSTRING_INDEX(value, '.', -1)) > 2

答案 5 :(得分:0)

SELECT *   从表t  楼层(t.columnname)!= t.columnname