SQLyog如何创建函数,详细教程

这是一个陷阱。
不同版本的SQLyog步骤不同,官方文档可能不完整。
不要相信自动向导,手写更可靠。

怎么样在sql server中用sql实现自定义函数(乘法)

哎呀,这段代码乍一看就像是一个新手程序员。
对于像给变量a和b赋值这样简单的事情,你仍然使用set。
这不是意味着麻烦吗?当时我很困惑,但后来意识到是这样的。

将变量a设置为2 ,变量b设置为1 ,这个数字这么简单,谁做不到呢?那么变量c需要a和b的乘积。
我怀疑这个逻辑是乘法。

那么set@c=@a@b这个写法就有点意思了。
当时我以为这是一个新订单。
其实它只是说把a乘b的结果赋给c。
简单来说,c等于2 乘以1 ,对吧。

这个编程真是全面又深入,连最小的细节都能让人摸不着头脑。
然而,初学者不可避免地会犯这样的基本错误。
我有点极端,但谁不是新手呢?

mysql自定义函数

结论:自定义函数是修改分区;定义数据库和DEFINER 需要DELIMITER。

创建动作: sql 分隔符$$ 创建函数 func_name(p1 INT, p2 VARCHAR(5 0)) 返回十进制 (1 0,2 )。
开始 声明 v INT; SET v = p1 + CAST(符号为 p2 ); 恢复到 v/2 .5 ; 结束$$ 分隔符;
要点: 规范:root@%申请权限。
限制:智力; VARCHAR 日期十进制。
返回值: 必须指定类型。
函数体:DECLARE;如果循环。

示例:交替分钟 sql 分隔符$$ 创建函数 Floor_time(t TIME, 分钟 INT); 还给时间。
开始 声明结果 TIME。
SET 结果 = SEC_TO_TIME(FLOOR(TIME_TO_SEC(t) / (至少 6 0)) (至少 6 0)); 返回结果; 结束$$ DELIMITER;
用法:SELECT Floor_time('09 :1 4 :00', 1 5 );
故障排除提示: 直接测试: SELECT func_name(1 0, '2 0'); 表数据测试:从表中选择 func_name(column_name),
定义:显示创建函数 func_name;
错误处理: sql 声明 SQLEXCEPTION 的继续处理程序。
开始 返回空值; 结束;
注意: 无法DDL:修改表结构。
无法修改:已修改的语句。
经常打电话:保持轻松。

权限:CREATEROUTINE。

完整示例: sql 分隔符// 创建函数calculate_discount(price DECIMAL(1 0,2 ), type VARCHAR(2 0)); 返回十进制 (1 0,2 )。
结束 开始 声明小数(3 ,2 ); 活动类型 当“VIP”时设置折扣 = 0.2 当“正常”时设置折扣 = 0.1 其他设置折扣 = 0.05 ; 案件结束; 回程价格(1
折扣); 结束 // DELIMITER;
用法:从产品中选择产品名称;价格calculate_discount(price, 'VIP'),
函数的使用方式与内置函数类似。

自己编写sql函数

说实话,这个函数写起来还是蛮有趣的,但是使用的时候可能需要小心一些。
作为一个例子,看看我之前做的订单处理系统。
他们使用此功能来拆分产品代码,因为他们经常混合具有不同参数的代码。

例如,在您看到的示例中,code_table 中的代码字段是一组用点分隔的代码,例如 ABC.DEF.GHI。
他们想直接获取第四个子句,也就是GHI部分,结果就是用dbo.Get_StrArrayStrOfIndex(code,'.',4 )这样写。
如果代码是 ABC.DE.FGH.IJK,它确实会返回 FGH;但前提是正确使用索引帧。

当时我不明白的是@location0和@index>@next行。
老实说,逻辑有点混乱。
例如,如果代码是 ABC.DE.FGH 如果采用第四个子句;它实际上会卡在@location=0并直接返回FGH而不是报告“没有第四个子句”错误。
实际上恰恰相反 - 您想要处理“段不足”的情况,但实际上并不将其作为异常抛出。

有趣的是,后来将它们转换为正则表达式解决了问题。
SQL Server自带的PATINDEX函数也可以和SUBSTRING一起使用,但是用于写情况更复杂。
这个函数最大的缺陷就是最后一行@location select @location=len(@str)+1 说实话,这种文笔不需要太多。
分隔符是否位于字符串末尾或根本不位于字符串末尾。
返回一个空字符串不是更好吗?如果将它与 len(@str)+1 配对,代码读者会感到困惑。

不过话说回来,这种自定义函数在旧系统中相当常见。
我记得有一个项目,他们用来处理从 Excel 导入的数据,用逗号分隔每一行以获得第三个字段。
我记得数据大约有 2 ,000 行;相当快,但它占用了内存。
在这方面,我自己没有运行过最新版本的 SQL Server,但我建议您检查一下。
现在使用 STRING_SPLIT 函数可能更方便。