假设你有一个字符串3.4564。
数据库中的样本集具有这些记录(VARCHAR):
Name Score
Peter 3.35643294332
John 3.47870923
James 3.740249842
Henry 4.0432849
Solomon 3.456183923
Andrew 3.45743
你想截断3.4564到3个小数位(变成3.456)然后与数据库的值比较,当舍入到三个小数位时将给出与3.456相同的值,即检索名称'Solomon'
在php mysql中使用它的最佳方法是什么?
答案 0 :(得分:3)
如果您的得分列包含存储为varchar的数据,您可以使用CAST
函数将这些数据转换为十进制。例如:
mysql> select cast('3.35643294332' as decimal(10,3));
+----------------------------------------+
| cast('3.35643294332' as decimal(10,3)) |
+----------------------------------------+
| 3.356 |
+----------------------------------------+
1 row in set (0,01 sec)
请注意,这将正确地舍入值:
mysql> select cast('3.35663294332' as decimal(10,3));
+----------------------------------------+
| cast('3.35663294332' as decimal(10,3)) |
+----------------------------------------+
| 3.357 |
+----------------------------------------+
1 row in set (0,00 sec)
即。 :
'3.3564'
已投放到3.356
'3.3566'
已投放到3.357
现在,您只需在cast
子句中的比较中使用where
函数。
我认为这样的事情应该有用,例如:
select *
from your_table
where cast(Score as decimal(10,3)) = cast('3.4564' as decimal(10,3))
即,您将“输入”和分数转换为小数点后3位小数;并转换这些值。
一个旁注:这样做,你将不会使用你在Score上可能有的任何索引,并且总是会以全扫描结束...这意味着另一种解决方案会更好......例如,如果你可以使用像score >= X and Score <= Y
这样的where子句,它会好得多......
但是,由于得分存储为varchar,我认为它不会那么容易 - 你应该将它们存储为小数,顺便说一句......