mysql十进制查询问题

时间:2010-08-06 11:55:36

标签: mysql

首先我运行mysql Ver 14.12 Distrib 5.0.45,使用readline 5.0运行redhat-linux-gnu(x86_64)

很抱歉格式化但我没有能力复制它所以我必须输入它。

有问题的两个字段如下

id int(11)
startj1950 decimal(38,6)



mysql> select id,startj1950 from store where id = 32513;

+------------------+
| id       | startj1950           |
+----------|----------------------|
|32513     | 1912181654.500000    |
-----------------------------------

mysql> select id from store where startj1950=1912181654.500000;
Empty set

所以我想我在副本中搞砸了,所以我会让mysql为我获取价值。

mysql> select id from store where startj1950=(select startj1950 from store where id=32513);
Empty set <br/>

但它适用于其他结果

mysql> select id,startj1950 from store where id = 32513;

+------------------+
| id       | startj1950           |
+----------|----------------------|
|18675     | 1907365784.570000    |
-----------------------------------

mysql> select id from store where startj1950=1907365784.570000;

+----------+
| id       |
+----------|
|18675     |
------------

mysql> select id from store where startj1950=(select startj1950 from store where  id=18675);<br/>

+----------+
| id       |
+----------|
|18675     |
------------

我想我要么遇到了mysql错误,要么我误解了某种概念。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

decimal(38,6)将是一个浮点类型,具有与该类型相关的所有困难。在这种特殊情况下,这意味着显示的某些值不是精确值。该列的大小让我怀疑底层类型已经是双精度,因此要查询此列,您需要执行类似的操作...

SELECT *
    FROM store
    WHERE startj1950 BETWEEN somevalue - @delta AND somevalue + @delta;

并在获得所需结果之前调整delta的值,或者重新设计列以便您可以使用INTEGER或CHAR类型。