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 位十六进制)。
提示
必须指定 separator 和 replace_null_value,并且其中一个为 NULL 时,函数返回 NULL。
示例
-
创建表
test_tbl1。CREATE TABLE test_tbl1 (
col1 INT PRIMARY KEY,
col2 VARCHAR(20) NOT NULL,
col3 VARCHAR(50)
); -
插入测试数据
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 -
将表
test_tbl1的列col1、col2、col3用_连接成一个字符串,其中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)