赞
踩
因为今天项目上遇到了需要编写 数据库函数,所以记录一下
直接上函数创建的sql吧
create Function get_hrmid_name(@str varchar(1000)) Returns varchar(1000) as Begin -- 声明变量 -- 19,21,3, set @str = @str+',' Declare @insertStr varchar(50) --截取后的第一个字符串 Declare @newstr varchar(1000) --截取第一个字符串后剩余的字符串 Declare @strnum varchar(1000) --中间值 Declare @renum varchar(1000) --中间值 set @insertStr = left(@str,charindex(',',@str)-1) set @newstr = stuff(@str,1,charindex(',',@str),'') set @strnum=(select lastname from hrmresource where id = @insertStr) set @renum=@strnum while(len(@newstr)>0) begin set @insertStr = left(@newstr,charindex(',',@newstr)-1) set @strnum=(select lastname from hrmresource where id = @insertStr) set @renum= concat(@renum,',',@strnum) set @newstr = stuff(@newstr,1,charindex(',',@newstr),'') end Return (@renum) End go
上面的函数实现的功能是 把逗号隔开的id 作为条件到hrmresource里面查询 转换成具体的姓名
下面说下函数里面的逻辑
1.先定义变量,用来做运算或者取数
Declare @insertStr varchar(50) --截取后的第一个字符串
Declare @newstr varchar(1000) --截取第一个字符串后剩余的字符串
Declare @strnum varchar(1000) --中间值
Declare @renum varchar(1000) --中间值
2.运算逻辑处理
set @insertStr = left(@str,charindex(',',@str)-1)
set @newstr = stuff(@str,1,charindex(',',@str),'')
set 是用来设置变量的值;
CHARINDEX(str1,str[,start])函数返回子字符串str1在字符串str中的开始位置,
例如:CHARINDEX('a','banana')返回字符串'banana'中子字符串‘a’ 第一次出现的位置,结果为2;
LEFT()函数从提供的字符串的左侧提取给定数量的字符。 例如,LEFT('SQL Server',3)返回SQL。
STUFF 函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。
最后循环处理 上述逻辑,把查出来的name通过concat函数拼起来,最后返回 张三,李四,王二 一列数据
不同数据库函数和存储过程的编写都会有些差异
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。