我的数据库中有类似的数据:
+----+----------------+
| id | summ (varchar) |
+----+----------------+
| 1 | 30.23 |
| 2 | 10.235 |
| 3 | 20.2300 |
| 4 | 100.005 |
| 5 | 5.031 |
| 6 | 0.0010002 |
+----+----------------+
如何在MySQL查询中收到超过2位十进制数字(零还计数)的所有数据?
一开始我只得到那些有3位数并以5结尾的那些,所以我使用了这个命令substring( summs * 100, -2 ) = '.5'
,但我不知道如何得到各种数字。
答案 0 :(得分:4)
您可以这样做: -
SELECT *
FROM `table`
WHERE LENGTH(SUBSTR(`summ `,INSTR(`summ `,"."))) >3
答案 1 :(得分:0)
所以你希望SQL查询排除“20.23”但包含“20.2300”,是吗?
鉴于这些是字符串,而不是浮点数,您可以在查询中使用字符串函数,特别是INSTR()和LENGTH()的组合。使用前者来定位小数点(句点),然后将其与字符串的长度(减去2)进行比较。
答案 2 :(得分:0)
您还可以执行以下操作:
SELECT *
FROM tableName
WHERE columnName <> ROUND (columnName, 2)
答案 3 :(得分:0)
我想@Rahul Tripathi的解决方案很可能是最好的。
但是我在不同的上下文中尝试了一些方法,并根据以下问题的答案找到了另一个可能解决方案:Store only numbers after Comma mysql
此解决方案受到“严格限制”,在这种情况下,由于MySQL的工作方式以及存储浮点值等,因此它可以正常工作。
假定summ
是一个数字(如果是字符串,则需要强制转换,或仅使用@Rahul Tripathi的解决方案)。并且由于精度和存储原因,summ
最好是一个十进制而不是 float 。
SELECT *
FROM `table`
WHERE (LENGTH(TRIM(TRAILING "0" from MOD(`summ`, 1))) - 2) > 2;
要测试:
set @fraction = 100.005;
set @modulo = mod(@fraction, 1);
set @modulo = trim(trailing "0" from @modulo);
set @decimals = length(@modulo) - 2;
select @fraction, @modulo, @decimals;
+-----------+---------+-----------+
| @fraction | @modulo | @decimals |
+-----------+---------+-----------+
| 100.005 | 0.005 | 3 |
+-----------+---------+-----------+
1 row in set (0.00 sec)
注意:使用CAST("12.345" as DECIMAL(10,5))
进行转换需要先知道有关显示位数的知识。如果您正在计算数据库中的值或使用"12.345" + 0
从字符串中强制转换它们,则可以使用,但是由于二进制浮点数的存储方式,您将得到类似"12.345" + 0
→{ {1}}可能不是您想要的答案。然后,您可以尝试在某个位置后再次舍入以除去数字,依此类推...