CREATE FUNCTION murmurhash3( input_string VARCHAR(255), seed INT ) RETURNS BIGINT DETERMINISTIC BEGIN DECLARE h1, k1, c1, c2 BIGINT; DECLARE i, len INT; DECLARE key_varbinary VARBINARY(255); SET len = CHAR_LENGTH(input_string); SET h1 = seed; SET c1 = 0xcc9e2d51; SET c2 = 0x1b873593; SET key_varbinary = CAST(input_string AS VARBINARY); SET i = 1; WHILE (i <= len) DO SET k1 = CAST(SUBSTRING(key_varbinary, i, 1) AS UNSIGNED); SET k1 = k1 * c1; SET k1 = (k1 << 15) | (k1 >> 49); SET k1 = k1 * c2; SET h1 = h1 ^ k1; SET h1 = (h1 << 13) | (h1 >> 51); SET h1 = h1 * 5 + 0xe6546b64; SET i = i + 1; END WHILE; SET h1 = h1 ^ len; SET h1 = h1 ^ (h1 >> 16); SET h1 = h1 * 0x85ebca6b; SET h1 = h1 ^ (h1 >> 13); SET h1 = h1 * 0xc2b2ae35; SET h1 = h1 ^ (h1 >> 16); RETURN h1; END//
时间: 2024-04-21 12:29:10 浏览: 20
这是一个MySQL函数,实现了MurmurHash3哈希算法,用于将输入字符串转换为一个64位整数。MurmurHash3是一种高效的哈希算法,具有良好的性能和分布特性,常用于数据存储、索引和查找等场景中。该函数接受两个参数,一个是输入字符串,一个是哈希种子,返回一个64位整数。函数中使用了一些位运算和常量,以实现MurmurHash3算法的核心逻辑。该函数是确定性的,即对于相同输入和种子,始终返回相同的输出。
相关问题
DELIMITER $$ use dbstudent$$ create function fn_select_studentname (student_id int) returns smallint begin declare student_name varchar(50); select student_name = name from student where id = student_id; return student_name; end$$ delimiter ;如何修改
这个函数使它不仅能够返回学生名字,还可以返回学生年龄?
要修改这个函数使它不仅能够返回学生名字,还可以返回学生年龄,需要进行以下几个步骤:
1. 首先,在函数的返回类型中将 smallint 改为一个更合适的类型,例如一个存储年龄的整数类型,比如 int。
2. 在函数中添加一个新的变量 age,用于存储年龄信息。
3. 在查询语句中添加一个新的字段 age,将查询结果放入 age 变量中。
4. 最后,将 age 变量作为函数返回值返回。
下面是修改后的函数代码:
DELIMITER $$
use dbstudent$$
create function fn_select_student_info (student_id int)
returns int
begin
declare student_name varchar(50);
declare age int;
select student_name = name, age = age
from student
where id = student_id;
return age;
end$$
delimiter ;
delimiter // create function func_user(in in_id int) returns varchar(50) begin declare out_name varchar(50); select name into out_name from tb_user where id = in_id; return out_name; end//
你这个创建存储函数的语句已经基本正确了,只需要在最后加上重新定义结束符号的语句即可,具体如下:
```
delimiter //
create function func_user(in in_id int) returns varchar(50)
begin
declare out_name varchar(50);
select name into out_name from tb_user where id = in_id;
return out_name;
end //
delimiter ;
```
在这个语句中,DELIMITER 命令定义结束符号为 //,函数体中声明了一个局部变量 out_name,然后从 tb_user 表中查询用户姓名并赋值给 out_name 变量,最后通过 return 语句返回 out_name 变量的值。
需要注意的是,使用 DELIMITER 命令时,应该在每个语句的末尾加上结束符号 //,在最后使用 DELIMITER ; 命令重新定义结束符号为分号。这样,MySQL 才能正确地识别存储函数的语法结构。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)