mysql基础知识理解和sql题讲解分析面试实战(四)之函数讲解和字符串的操作

与世无争的帅哥 提交于 2019-12-10 03:24:35

mysql基础知识理解和sql题讲解分析面试实战(四)之函数讲解和字符串的操作

  • 函数的创建
  • 字符串函数的操作

用例 查询表road 下的roadname的紧挨着第一个括号的是大写字母或数字的记录

创建表
CREATE TABLE `road` (
  `id` int(10) NOT NULL,
  `roadname` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据

输入图片说明

创建函数

用mysql下创建需添加

注意:mysql 安装后默认函数是关闭的 查看创建函数的功能是否开启: mysql> show variables like '%func%'; +-----------------------------------------+-------+ | Variable_name | Value | +-----------------------------------------+-------+ | log_bin_trust_function_creators | ON | +-----------------------------------------+-------+ 1 row in set (0.02 sec) 如果Value处值为OFF,则需将其开启。 mysql> set global log_bin_trust_function_creators=1;


delimiter $$
CREATE FUNCTION isNumandupzimu(s1 varchar(16))
RETURNS TINYINT
-- 当然要以delimiter 结束

在nabvicat下创建

BEGIN
DECLARE result int DEFAULT 0;-- 0是假的
IF ISNULL(s1) then return 0; end if;
if s1 ='' then return 0;end if;
SELECT s1 REGEXP BINARY'^[0-9A-Z]+$' into result; -- REGEXP默认也是不区分大小写,需使用BINARY关键词强制区分大小
-- 查询
-- SELECT s1 REGEXP '^[0-9]+$' into result2;
if result =1 then return 1; -- 1 是真的
else return 0;
end if;
END

  • 注意 if 后面没有括号,if 后结束要紧跟 end if
执行查询
  • select INSTR('西三环(S)','('); -- instr()可以查出'(' 在字符串的哪个位置,记住mysql是以1开始计数的
  • select SUBSTR('西三环(S)',4+1,1); -- substr(str,pos,len) 可以查出字符串从那个位置到哪个位置的 返回的是子字符串 ,从第5位开始包括第5位,第5位是一个长度
  • select* from road where isNumandupzimu(SUBSTR(roadname,INSTR(roadname,'(')+1,1)) = 1;-执行结果

输入图片说明

结论

  • 该章让你可以掌握自定义函数和函数的调用
  • 对字符串函数的基本掌握
  • QQ大数据交流群:181666459
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!