MySQL、Oracle 生成随机ID、随机数、随机字符串

目录

  • 1 MySQL 生成随机ID
    • 1.1 生成 唯一的随机ID:UUID()
    • 1.2 生成随机数:RAND()
      • 1.2.1 RAND():返回一个介于0和1之间的随机浮点数
      • 1.2.2 FLOOR(RAND() * 100):返回一个介于0和99之间的随机整数
      • 1.2.3 LPAD(FLOOR(RAND() * 99999999), 8, '0'):返回一个8位的随机字符串
  • 2 Oracle 生成随机ID
    • 2.1 生成 唯一的随机ID:SYS_GUID()
    • 2.2 生成随机数
      • 2.2.1 DBMS_RANDOM.VALUE(low, high): 生成一个介于low和high之间的随机数值。
      • 2.2.2 DBMS_RANDOM.STRING(format, length): 生成一个指定格式和长度的随机字符串。

1 MySQL 生成随机ID

1.1 生成 唯一的随机ID:UUID()

UUID():是由128位的数字组成的全局唯一标识符。每次都生成一个新的随机数。

它通常以32个十六进制数的形式表示,分为5个部分,以连字符分隔。

UUID的长度是36个字符,包括32个十六进制数字和4个连字符。

UUID的标准格式是由 8-4-4-4-12 个十六进制数字组成的,其中每个部分的长度是固定的。

典型UUID,如:
22e2a70a-b1ce-11ee-84af-00ff25f02c26

参考案例:

SELECT UUID() AS random_id; -- 返回:22e2a70a-b1ce-11ee-84af-00ff25f02c26
SELECT LENGTH(UUID()); --返回:36

补充:
LENGTH(str) : 返回 字符串长度

1.2 生成随机数:RAND()

1.2.1 RAND():返回一个介于0和1之间的随机浮点数

参考案例:

SELECT RAND() AS random_number; -- 返回:0.005985797388465886

1.2.2 FLOOR(RAND() * 100):返回一个介于0和99之间的随机整数

参考案例:

SELECT FLOOR(RAND() * 100) AS random_integer; -- 返回:98
SELECT FLOOR(RAND() * 1000) AS random_integer; -- 返回:617
SELECT FLOOR(RAND() * 10000) AS random_integer; -- 返回:2115

FLOOR(RAND() * 10的n次方):返回一个[ 0 到 (10的n次方)-1]之间的随机整数

补充:
FLOOR() :返回不大于给定数值的最大整数。FLOOR(4.8) : 返回 4
CEILING() :返回不小于给定数值的最小整数。CEILING(4.1):返回 5
ROUND():返回一个四舍五入到最接近的整数。
例子 ROUND(4.1):返回 4,ROUND(4.8):返回 5

1.2.3 LPAD(FLOOR(RAND() * 99999999), 8, ‘0’):返回一个8位的随机字符串

LPAD(string, length, pad_string):表示从左边填充字符串。
string:原始字符串
length:填充后的字符串长度
pad_string:用于填充的字符或字符串
如果pad_string未写,LPAD函数将会在原始字符串的左边粘贴空格。

参考案例:

SELECT LPAD(FLOOR(RAND() * 999999), 8, '0') AS random_string; -- 返回:00794823
SELECT LPAD(FLOOR(RAND() * 9999999), 8, '0') AS random_string; -- 返回:05299041
SELECT LPAD(FLOOR(RAND() * 99999999), 8, '0') AS random_string; -- 返回:26504930

2 Oracle 生成随机ID

2.1 生成 唯一的随机ID:SYS_GUID()

SYS_GUID():这个全局唯一标识符是一个128位的数字,通常以十六进制字符串的形式表示,长度为 32。

参考案例:

SELECT SYS_GUID() FROM DUAL; 

但是查出来的是乱码:
在这里插入图片描述
原因:SYS_GUID() 返回的结果是一个16字节的二进制值(RAW类型)。

处理方案:
RAWTOHEX():将RAW类型的数据转换为十六进制字符串表示。

SELECT RAWTOHEX(SYS_GUID()) FROM DUAL; -- 返回:D1F80DF570DC419DBA36ABF704E73B31 
SELECT LENGTH(RAWTOHEX(SYS_GUID())) FROM DUAL; -- 返回:32

LOWER():大写 转成 小写

SELECT LOWER(RAWTOHEX(SYS_GUID())) FROM DUAL; -- 返回:8d8a96f220c2443fba4d29303756be24
SELECT LENGTH(LOWER(RAWTOHEX(SYS_GUID()))) FROM DUAL; -- 返回:32

补充:
UPPER():小写 转成 大写

SELECT UPPER('string') FROM DUAL; -- 返回:STRING

注意:MySQL、Oracle 的大写转小写、小写转大写 函数是一样的。

2.2 生成随机数

2.2.1 DBMS_RANDOM.VALUE(low, high): 生成一个介于low和high之间的随机数值。

参考案例:

SELECT DBMS_RANDOM.VALUE FROM DUAL; -- 返回:0.70223750257579254042504448365740539856
SELECT DBMS_RANDOM.VALUE(1, 100) FROM DUAL; -- 返回:51.89475447588778860620040850818551418562
SELECT TRUNC(DBMS_RANDOM.VALUE(1, 100)) FROM dual; -- 返回:85

补充:
TRUNC():将数字的小数部分截去,返回整数。也可以截取字符串类型的数字。

SELECT TRUNC(5555.6666) FROM dual; -- 返回:5555
SELECT TRUNC('5555.6666') FROM dual; -- 返回:5555
SELECT TRUNC('5555.6666',2) FROM dual; -- 返回:5555.66

2.2.2 DBMS_RANDOM.STRING(format, length): 生成一个指定格式和长度的随机字符串。

format : 格式,length : 长度。

具体格式如下:
‘U’:表示生成包含大写字母的随机字符串
‘L’:表示生成包含小写字母的随机字符串
‘A’、‘a’:表示生成包含大写字母、小写字母的随机字符串
‘X’:表示生成包含大写字母、数字的随机字符串
‘P’:表示生成包含可打印字符的随机字符串

参考案例:

SELECT DBMS_RANDOM.STRING('U', 10) FROM DUAL; -- 返回:DBQTMEUFTL
SELECT DBMS_RANDOM.STRING('L', 10) FROM DUAL; -- 返回:hreclcycet
SELECT DBMS_RANDOM.STRING('A', 10) FROM DUAL; -- 返回:qOKsvigiLO
SELECT DBMS_RANDOM.STRING('a', 10) FROM DUAL; -- 返回:UuqsSDrZlJ
SELECT DBMS_RANDOM.STRING('X', 10) FROM DUAL; -- 返回:PMU5MKH557
SELECT DBMS_RANDOM.STRING('P', 10) FROM DUAL; -- 返回:3:2l6G8!On

你可能感兴趣的:(数据库,mysql,oracle,数据库)