目录
- 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