从mysql数据库中检索截断的记录

时间:2010-02-28 07:56:39

标签: php mysql

假设你有一个字符串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中使用它的最佳方法是什么?

1 个答案:

答案 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,我认为它不会那么容易 - 你应该将它们存储为小数,顺便说一句......