2014-09-23 28 views
-2

我不確定你是否正確理解我的問題。所以我可以解釋一下。我有一個客戶表,需要用不同的號碼進行測試(不管它是否真實)。因此,這是該腳本:如何隨機抽取一個零字符的字段mysql

customer_db

+----+------------+ 
| ID | NUMBER | 
+----+------------+ 
| 1 | 0812345678 | 
+----+------------+ 
| 2 | 0812345678 | 
+----+------------+ 
| 3 | 0812345678 | 
+----+------------+ 
. 
. 
. 
|100 | 0812345678 | 

根據表格。我跑了這個腳本:

UPDATE customer_db SET number = FLOOR(0812345678 + rand()*1000000); 

這樣做。我期望這個領域保持與領先'081'相同的格式,並隨機選擇其餘6位數字。 但它不是。該表成爲這些:

+----+------------+ 
| ID | NUMBER | 
+----+------------+ 
| 1 | 812246797 | 
+----+------------+ 
| 2 | 816548798 | 
+----+------------+ 
| 3 | 815787898 | 
+----+------------+ 
. 
. 
. 
|100 | 813454687 | 

9位數字而不是10個。因爲前導'0'丟失。我應該怎麼做才能在隨機後保持領先的'0'。

+1

也許你應該使用字符串類型,而不是一個數字,如CHAR? 看到這篇文章[鏈接](http://stackoverflow.com/questions/3200754/mysql-how-to-front-pad-zip-code-with-0) – 2014-09-23 14:06:10

+0

我可以用'CHAR'做數學嗎? – Wilf 2014-09-23 14:07:16

+0

先做數學然後轉換成CHAR並填充0 – 2014-09-23 14:08:13

回答

3

像@ B-and-P在他的評論中描述的那樣。你可以使用LPAD來做到這一點。

UPDATE 
    customer_db 
SET 
    number = LPAD(FLOOR(number + rand()*1000000),10,0) 

LPAD使用3個參數;字符串,字符總數以及最後但並非最不重要的字符應該用於填充。

+0

非常感謝。這是我正在尋找的那種深思熟慮的答案。 – Wilf 2014-09-23 14:19:07

1

作爲替代@Benz答案,你可以試試這個(工作在我結束):

INSERT INTO Table1 (`NUMBER`) 
VALUES 
(CONCAT('081',rand()*100000000)) 

表模式

CREATE TABLE IF NOT EXISTS `table1` (
`ID` int(11) DEFAULT NULL, 
`NUMBER` char(10) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
+0

謝謝非常多的B-and-P,這是一個開始在桌子上的好主意,我會記錄下來供將來使用。 – Wilf 2014-09-23 14:45:36