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