2012-10-26 37 views
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)); 

現在它按預期工作!

回答

1

我相信數據類型可能有問題。 Rand()返回一個浮點值。我不是MySQL專家,但我想知道浮點是否繼承地轉換爲int。

嘗試將Rand()的結果轉換爲int或將bigint轉換爲float或decimal。

+0

你是對的!我已經搜索了一下鑄造,並找到了解決方案! –