如何随机区分零前导字符串字段mysql

时间:2014-09-23 14:04:18

标签: php mysql random sql-update

我不确定你是否正确理解我的问题。我可以解释一下。我有一个客户表,需要用不同的数字进行测试(无论是否真实)。所以这是脚本:

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'。

2 个答案:

答案 0 :(得分:3)

就像@ B-and-P在他的评论中描述的那样。您可以使用LPAD

执行此操作
UPDATE 
    customer_db
SET
    number = LPAD(FLOOR(number + rand()*1000000),10,0)

LPAD使用3个参数;字符串,字符总数以及最后但并非最不重要的字符应该用于填充。

答案 1 :(得分: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;