2014-09-23 61 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