一.存储过程和函数的区别

函数调用有返回值

存储过程调用用call语句,函数调用直接饮用函数名+参数

IN,OUT,INOUT

只适用于存储过程,对函数而言所有参数默认都是输入参数

IN用于把数值传入到存储过程中

OUT用于输出参数将数值传递给调用者

INOUT输入输出参数把数据传入到存储过程,在存储过程中修改后再传递给调用者

二.存储过程实践

功能:格式化数据

DELIMITER //

CREATE PROCEDURE sieAttendanceService.checkData(IN myId BIGINT, OUT spaceId BIGINT)

SQL SECURITY INVOKER

BEGIN

DECLARE space_num INT DEFAULT 0;

DECLARE temp VARCHAR(50);

DECLARE num_index INT DEFAULT 0;

select count(*) from sie_attendance_external_t t where t.on_time='' and t.off_time='' and t.id > myId into space_num;

while num_index < space_num do

set num_index = num_index + 1;

select id from sie_attendance_external_t t where t.on_time='' and t.off_time='' and t.id > myId into spaceId;

end while;

/*更新供应商编号*/

update sie_attendance_external_t t

set t.company_code = '032128'

where id > myId;

/*去掉空格*/

update sie_attendance_external_t t

set t.staff_name = trim(t.staff_name),

t.staff_id_no = trim(t.staff_id_no),

t.swipe_date = trim(t.swipe_date),

t.on_time = trim(t.on_time),

t.off_time = trim(t.off_time)

where t.id > myId;

/*将?替换成空*/

update sie_attendance_external_t t

set t.staff_name = replace(t.staff_name,CHAR(120),''),

t.staff_id_no = replace(t.staff_id_no,CHAR(120),''),

t.swipe_date = replace(t.swipe_date,CHAR(120),''),

t.on_time = replace(t.on_time,CHAR(120),''),

t.off_time = replace(t.off_time,CHAR(120),'')

where t.id > myId;

/*将.替换成:*/

update sie_attendance_external_t t

set t.staff_name = replace(t.staff_name,CHAR(190),CHAR(16)),

t.staff_id_no = replace(t.staff_id_no,CHAR(190),CHAR(16)),

t.swipe_date = replace(t.swipe_date,CHAR(190),CHAR(16)),

t.on_time = replace(t.on_time,CHAR(190),CHAR(16)),

t.off_time = replace(t.off_time,CHAR(190),CHAR(16))

where t.id > myId;

/*去掉回车和换行*/

update sie_attendance_external_t t

set t.staff_name = REPLACE(REPLACE(t.staff_name, CHAR(10), ''), CHAR(13),''),

t.staff_id_no = REPLACE(REPLACE(t.staff_id_no, CHAR(10), ''), CHAR(13),''),

t.swipe_date = REPLACE(REPLACE(t.swipe_date, CHAR(10), ''), CHAR(13),''),

t.on_time = REPLACE(REPLACE(t.on_time, CHAR(10), ''), CHAR(13),''),

t.off_time = REPLACE(REPLACE(t.off_time, CHAR(10), ''), CHAR(13),'')

where t.id > myId;

/*更新上班时间格式*/

update sie_attendance_external_t t

set t.on_time = (

select case when length(tt.on_time)=7

then concat('0',tt.on_time)

else

tt.on_time

end

from (select * from sie_attendance_external_t) tt where t.id = tt.id)

where id > myId;

/*更新下班时间格式*/

update sie_attendance_external_t t

set t.off_time = (

select case when length(tt.off_time)=7

then concat('0',tt.off_time)

else

tt.off_time

end

from (select * from sie_attendance_external_t) tt where t.id = tt.id)

where id > myId;

END

//

函数实践

作用: 从不规则的数据中截取时间戳。

DELIMITER $$

create function getnum(param varchar(50))

returns varchar(50)

begin

DECLARE postion INT;

DECLARE len INT;

DECLARE str varchar(50) DEFAULT param;

DECLARE tmp varchar(50) DEFAULT '';

set postion = (select InStr (param,'_')-1);

/*判断是否存在下划线*/

if postion <> -1 then

set str = (select left(param,postion));

end if;

/*开始循环判断*/

set len = char_length(str);

lop:begin

while len > 0 do

if(ascii(mid(str,len,1))>47 and ascii(mid(str,len,1))<58) then

set tmp = concat(tmp,mid(str,len,1));

else

/*如果不是数字,直接返回*/

LEAVE lop;

END IF;

SET len = len - 1;

END WHILE;

end lop;

/*返回结果集*/

return REVERSE(tmp);

end $$

总结:存储过程的使用需用call 关键字调用,

函数直接select中使用,直接拿到返回值。

mysql函数使用场景_mysql的函数和存储过程的比较,以及在实际场景中的使用案例...相关推荐

  1. 将mysql日期格式转换_MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) 2.WEEKDAY(date) 3.DAYOFMO ...

  2. mysql 正无穷字符_mysql 字符串函数收集比较全

    ASCII(str)返回字符串str的 最左面字符的ASCII代码值.如果str是空字符串, 返回0.如果str是NULL,返回NULL. mysql> select ASCII('2'); - ...

  3. mysql 字符串 截取字母_MySQL字符串函数:字符串截取

    MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...

  4. rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)

    在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...

  5. mysql开窗函数有哪些_mysql开窗函数

    开窗函数: 它可以理解为记录集合,开窗函数也就是在满足某种条件的记录集合上执行的特殊函数. 对于每条记录都要在此窗口内执行函数,有的函数随着记录不同,窗口大小都是固定的,这种属于静态窗口: 有的函数则 ...

  6. mysql当前日期减去天数_mysql日期函数-日期相减返回天数

    一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +-------------------- ...

  7. mysql的聚合函数文档_MySQL聚合函数

    MySQL聚合函数 MySQL的聚合函数用于对多个值执行计算,并将结果返回为单个值,如所有值的平均值,所有值的总和以及某些值组中的最大值和最小值.我们通常将聚合函数与数据查询语言中的SELECT语句一 ...

  8. mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类

    本方法不易维护,建议取出数据,在程序中递归,例如 https://javascript.net.cn/article?id=654 代码如下:delimiter / DROP FUNCTION IF ...

  9. mysql 处理文本数据_MySQL ------ 数据处理函数(文本、日期、数值)(十)

    与大多数语言一样,SQL支持利用函数来处理数据. 好处:函数一般在数据上执行,给数据的转换和处理提供了方便. 可移植的(portable) : 能运行在多个系统上的代码. 注意: 1.多数SQL 是可 ...

最新文章

  1. ubuntu 安装RPM软件包
  2. hdfs入门——常用命令
  3. 软件开发有多少种方式
  4. 蓝牙地址的name为null_蓝牙, enable协议栈流程
  5. 分布式入门:常用的分布式基础算法
  6. android之APP模块编译
  7. 06_Jedis完成MySQL的条件查询案例
  8. 成立一年 百度搜索公司迎来首任 CTO
  9. 反向传播网络(BP 网络)
  10. 适配器模式的原理与实现
  11. Linux内核线程kernel thread详解--Linux进程的管理与调度(十)
  12. (转)浅说深度学习:核心概念
  13. 使用R包qpdf用一行代码将多个pdf合并为一个pdf
  14. 维宏控制卡win7 驱动_维宏雕刻机控制卡驱动
  15. 计算机鼠标没有安装驱动,鼠标动不了怎么安装驱动_电脑鼠标不能动怎么安装驱动...
  16. python opencv图像对比度_OpenCV基础(四)---图像对比度,亮度调整
  17. 雷达的工作原理示意图_雷达基本理论与基本原理
  18. 2021年黄石二中高考成绩查询,【黄石二中2018高考金榜】黄石二中2004届高考总结...
  19. oracle11g认证,ORACLE11g-OCP认证(甲骨文专家级数据库工程师)
  20. PCI-E的针脚定义的简单讲解(备忘)

热门文章

  1. 快捷键_AutoCAD 2021中的默认快捷键、新建或编辑快捷键
  2. 三张表有重复字段_什么?搞不定Kafka重复消费?
  3. android 远程桌面连接闪退,远程桌面一点连接就闪退,不能弹出输入账号密码窗口...
  4. 的控制台主题_【12.11最新版】芯片机/大气层主题软件NXThemesInstaller
  5. python语法学习_Python学习1——语法
  6. python discuz_pythonDiscuz发帖器的实现
  7. 怎么用python编程前二n-1项的等差数列的和_python 等差数列末项计算方式
  8. assertpythonraise_使用assertRaise测试异常消息
  9. android添加删除项目,编写android计算器添加删除按钮,出现很抱歉,XX项目已停止运行。...
  10. html中所有的标签,HTML中的所有标签及其做用!