给user表每个用户添加一个随机手机号

了解一下SUBSTRING()函数:

SUBSTRING()函数主要是用来提取字符串中指定子串。

SUBSTRING(str, pos, len);

就是对str字符串,从pos位置开始(如果省略视为1处理),提取len长度的子串(省略则视为从pos开始到字符串结束)。

//例如:
SELECT SUBSTRING('Hello, world!', 3, 5);   -- 输出 llo, 

了解一下CAST()函数:

CAST()函数用来做数据转换。

//例如:
SELECT CAST('123' AS SIGNED); --将字符串'123'转换成有符号整型数字123

了解一下RAND()函数:

RAND()函数主要是用于生成一个随机浮点数函数,返回值在0-1之间(包括0但不包括1),可以通过组合RAND()函数和其他函数来实现各种随即操作。

//例如:
SELECT RAND();    -- 随机生成一个小于1的浮点数
SELECT RAND()*100;  -- 随机生成一个小于100的浮点数
SELECT FLOOR(RAND()*100);  -- 随机生成一个小于100的整数

了解一下CONCAT()函数:

CONCAT主要是用来将多个字符串连接成一个字符串的函数。

//例如:
SELECT CONCAT('Hello', ' ', 'World');     -- 输出 Hello World 

在有了这四个函数帮助下则可以完成题目的更新操作了

UPDATE user SET user_contact = CONCAT('1', SUBSTRING(CAST(RAND()*10000000000 AS UNSIGNED) FROM 1 FOR 10));

具体的思考历程是这样的:

  1. 用RAND()随机生成一个0到9999999999之间的数字。
  2. 用CAST()将该数字强制转换成UNSIGNED整型,以确保数据类型正确性和数值精度。
  3. 使用SUBSTRING()函数截取该整型数的前10个数字,并转换成字符串形式,即生成了一个10位的纯数字字符串作为手机号。
  4. 使用CONCAT()函数将前缀’1’和10位随机手机号字符串组合成一个长度为11位的假手机号。
  5. 将该假手机号作为user_contact列的值,通过UPDATE语句更新名为user的表中的每一行。

BUT!

后来发现这样做是有错的!,因为如果生成的随机数字前面有0那么手机号的位数就会出现问题!

//更改:
UPDATE user SET user_contact = CONCAT('1', LPAD(FLOOR(RAND()*10000000000), 10, '0')) WHERE LENGTH(user_contact) != 11;

再了解一下FLOOR()函数:

FLOOR用于向下取整。舍掉小数点后部分,在不超过这个数的前提下返回最大的证书。通常会和RAND()一起使用。常被用来将浮点数转换成整型,以便于数字比较和格式化操作,比如可以将浮点数进行舍位后再进行数据聚合,或用来生成区间随机数。

//例如:
SELECT FLOOR(2.8);     -- 输出结果 2
SELECT FLOOR(-2.8);    -- 输出结果 -3

再了解一下LPAD()函数:

用于在字符串左侧填充指定字符串,直到字符串达到指定长度。

//例如:
SELECT LPAD('666', 5, '0'); --在666左侧添0,使得最终字符串长度为5,并返回结果00666

再了解一下LENGTH()函数:

用于返回指定字符串长度。

SELECT LENGTH('Hello World'); -- 输出 11

比如说,在更新user表user_contact列时,我们可以使用LENGTH()函数判断当前值是否已经是11位长度,如果长度不足,则使用其他函数进行填充或者重新生成随机数。

更改之后的SQL:

UPDATE user SET user_contact = CONCAT('1', LPAD(FLOOR(RAND()*10000000000), 10, '0')) WHERE LENGTH(user_contact) != 11;
  1. 使用RAND()函数生成一个0到1之间的随机浮点数。
  2. 将其乘以10000000000,得到0-9999999999之间的随机整数。
  3. 对该整数向下取整,并使用LPAD()函数将其转换为一个长度为10位的字符串,并在左侧填充’0’。
  4. 在该字符串前面添加’1’作为国际区号,组成一个长度为11位的随机电话号码。
  5. 检查已有user_contact值的长度是否为11位,如果长度不为11,则说明该字段未初始化或不满足要求,需要进行更新。
  6. 使用UPDATE…SET…WHERE语句将生成的随机电话号码更新到user表的user_contact列中,替换那些不符合要求的行。

猜你喜欢

转载自blog.csdn.net/qq_45800977/article/details/130197135