2
我有以下查詢:MySQL的選擇數溢出
SELECT (RAND() * (SELECT MAX(id) FROM frag.test))
結果:-2.36835027969671e + 18
ID是一個:id
BIGINT(20)無符號
的事情之一是
SELECT MAX(id) FROM frag.test
結果15783548581713655808
如果我把字面數字,而不是選擇的工作在1.50243050315076e
SELECT (RAND() * 15783548581713655808
結果+ 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));
現在它按預期工作!
你是對的!我已經搜索了一下鑄造,並找到了解決方案! –