跳到主要内容

MD5_CONCAT_WS

描述

该函数用于把多个字符串连接成一个字符串,相邻字符串间使用 separator 分隔。参数中包含 NULL 时,使用 replace_null_value 替换 NULL 进行连接,之后计算拼接字符串的 MD5 结果作为返回值。

注意事项

  • 该函数可能有概率碰到 Hash 碰撞,导致不同的输入可能存在相同的结果。

  • 需要指定不会和输入列重复的值作为 NULL 值的替换值,尽可能保证 NULL 替换后的结果不会和输入列值重复。错误用法如下:

    MD5_CONCAT_WS('_', '@', 'a', NULL, 'b') = MD5('a_@_b')

    MD5_CONCAT_WS('_', '@', 'a', '@', 'b') = MD5('a_@_b')

语法

MD5_CONCAT_WS(separator, replace_null_value, str1, ... , strN)

参数解释

  • separator:字符串,拼接各输入值时使用的分隔符。
  • replace_null_value:字符串,输入值为 NULL 时用此值替换。
  • str1, ... , strN:字符串列表,待拼接的输入值(可变参数)。

返回值

返回拼接后字符串的 MD5 值(32 位十六进制)。

提示

必须指定 separatorreplace_null_value,并且其中一个为 NULL 时,函数返回 NULL

示例

  1. 创建表 test_tbl1

    CREATE TABLE test_tbl1 (
    col1 INT PRIMARY KEY,
    col2 VARCHAR(20) NOT NULL,
    col3 VARCHAR(50)
    );
  2. 插入测试数据

    INSERT INTO test_tbl1 VALUES
    (1, 'A1', NULL),
    (2, 'A2', 'OceanBase'),
    (3, 'A3', 'DATABASE'),
    (4, 'A4', NULL),
    (5, 'A5', 'TABLEGROUP');

    返回结果如下:

    Query OK, 5 rows affected (0.002 sec)
    Records: 5 Duplicates: 0 Warnings: 0
  3. 将表 test_tbl1 的列 col1col2col3_ 连接成一个字符串,其中 NULL 值用 @ 替换,再生成 MD5 哈希值。

    SELECT MD5_CONCAT_WS('_', '@', t1.col1, t1.col2, t1.col3)
    FROM test_tbl1 t1;

    返回结果如下:

    +----------------------------------------------------+
    | MD5_CONCAT_WS('_', '@', t1.col1, t1.col2, t1.col3) |
    +----------------------------------------------------+
    | 7df704a058d6e9293f01ae16c5c01fef |
    | a7518a709f593d475604511ab528351d |
    | fcd7a30f8897edfaf2f725aafc6af30c |
    | 1ad84ebb99c253544f2341f9c2b5dd57 |
    | 26bb87a94aad329bae3d9cfb10b5614c |
    +----------------------------------------------------+
    5 rows in set (0.001 sec)