2

我有以下查询:

SELECT (RAND() * (SELECT MAX(id) FROM frag.test))

结果:-2.36835027969671e+18
id is a: idbigint(20) unsigned

事情是这样的

SELECT MAX(id) FROM frag.test

结果15783548581713655808

如果我放置文字数字而不是选择它就可以了

SELECT (RAND() * 15783548581713655808

结果为 1.50243050315076e+19

还有以下查询:

SELECT RAND()*id from frag.test;

结果是:

+----------------------+
| RAND()*id            |
+----------------------+
| 2.90739099802377e+18 |
| 3.18790581714312e+18 |
| 4.55299756382674e+18 |
| 8.53310890373737e+18 |
| 5.32382972831492e+18 |
| 1.13192831652015e+19 |
+----------------------+

该问题似乎仅在使用 MAX() 时发生。

有人对这里可能发生的事情有任何想法吗?

谢谢!

编辑:

正如 coge 所指出的,这与铸造有关。我将查询更改为

SELECT (RAND() * (SELECT cast(MAX(id) as decimal(30,10)) FROM frag.test));

现在它按预期工作!

4

1 回答 1

1

我相信数据类型可能有问题。Rand() 返回一个浮点值。我不是 MySQL 专家,但我想知道浮点是否会继承转换为 int。

尝试将 Rand() 的结果转换为 int 或将 bigint 转换为浮点数或小数。

于 2012-10-26T18:30:22.537 回答