From d9621a20bfdff02016870d0fd167dbf6c42ddf99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=81=E7=AB=A0=E5=BD=AC?= <2629351295@qq.com> Date: Wed, 21 Sep 2022 13:10:09 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 翁章彬 <2629351295@qq.com> --- ...75\346\225\260\347\273\203\344\271\240.md" | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 "01\347\277\201\347\253\240\345\275\254/\344\275\234\344\270\232/2022-09-21 \345\207\275\346\225\260\347\273\203\344\271\240.md" diff --git "a/01\347\277\201\347\253\240\345\275\254/\344\275\234\344\270\232/2022-09-21 \345\207\275\346\225\260\347\273\203\344\271\240.md" "b/01\347\277\201\347\253\240\345\275\254/\344\275\234\344\270\232/2022-09-21 \345\207\275\346\225\260\347\273\203\344\271\240.md" new file mode 100644 index 0000000..453dddb --- /dev/null +++ "b/01\347\277\201\347\253\240\345\275\254/\344\275\234\344\270\232/2022-09-21 \345\207\275\346\225\260\347\273\203\344\271\240.md" @@ -0,0 +1,102 @@ +```sql +--(1)编写一个函数求该银行的金额总和 +go +create function banksum() +returns int + begin + declare a cursor scroll for (select CardMoney from BankCard) + open a + declare @a int =0 + declare @b int + fetch first from a into @b + while @@FETCH_STATUS=0 + begin + set @a+=@b + fetch next from a into @b + end + close a + return @a + end +go +select dbo.banksum() +--(2)传入账户编号,返回账户真实姓名 +go +create function bankname(@cardno varchar(40)) +returns varchar(20) + begin + declare @name varchar(20) + select @name=RealName from AccountInfo where AccountId =(select AccountId from BankCard where CardNo = @cardno) + return @name + end +go +select dbo.bankname('6225125478544587') +--(3)传递开始时间和结束时间,返回交易记录(存钱取钱),交易记录中包含 真实姓名,卡号,存钱金额,取钱金额,交易时间。 + +--方案一(逻辑复杂,函数内容除了返回结果的sql语句还有其他内容,例如定义变量等): +go +create function CardEx(@k date,@j date) +returns @cd table (RealName varchar(40),CardNo varchar(100),MoneyInBank money,MoneyOutBank money,ExchangeTime date) + begin + insert into @cd + select RealName,CardExchange.CardNo,MoneyInBank,MoneyOutBank,ExchangeTime from CardExchange + join BankCard on BankCard.CardNo = CardExchange.CardNo + join AccountInfo on AccountInfo.AccountId = BankCard.AccountId + where ExchangeTime > @k and ExchangeTime < @j + return + end +go +select * from CardEx('2022-09-06',getdate()) +drop function CardEx +--(4)查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”, +--根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", +--分别显示卡号,身份证,姓名,余额,用户等级,银行卡状态。 + +--方案一:直接在sql语句中使用case when + +--方案二:将等级和状态用函数实现 +go +create function lv(@cardno varchar(40)) +returns @cd1 table (cardno varchar(40),acccode varchar(40),name varchar(40),cardmoney money,lv varchar(40),cardstate varchar(40)) + begin + insert into @cd1 + select CardNo,AccountCode,RealName,CardMoney,(select + case + when CardMoney<300000 then '普通用户' + when CardMoney>=300000 then 'VIP用户' + end '用户等级' + from BankCard where CardNo = @cardno) 用户等级,(select + (case CardState + when 1 then '正常' + when 2 then '挂失' + when 3 then '冻结' + when 4 then '注销' + end) as 银行卡状态 + from BankCard where CardNo = @cardno) 银行卡状态 from AccountInfo + join BankCard on BankCard.AccountId = AccountInfo.AccountId + where AccountInfo.AccountId =(select AccountId from BankCard where CardNo = @cardno) + return + end +go +select * from dbo.lv('6225125478544587') +drop function age +--(5)编写函数,根据出生日期求年龄,年龄求实岁,例如: + +--​ 生日为2000-5-5,当前为2018-5-4,年龄为17岁 +--​ 生日为2000-5-5,当前为2018-5-6,年龄为18岁 +go +create function age(@empb date) +returns varchar(100) + begin + declare @age int + declare @age1 date + declare @age2 varchar(100) + set @age1 = getdate() + set @age = year(@age1)-year(@empb) + set @age2 = '生日为'+convert(varchar(20),@empb)+',当前为'+convert(varchar(20),@age1)+',年龄为'+convert(varchar(20),@age)+'岁' + return @age2 + end +go +select dbo.age('2008-05-08') + +``` + -- Gitee From 4a80ff9bfcd985155b8d2c1cd045f584acd4c6a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=81=E7=AB=A0=E5=BD=AC?= <2629351295@qq.com> Date: Wed, 21 Sep 2022 13:10:31 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 翁章彬 <2629351295@qq.com> --- .../2022-09-21 \345\207\275\346\225\260.md" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "01\347\277\201\347\253\240\345\275\254/\347\254\224\350\256\260/2022-09-21 \345\207\275\346\225\260.md" diff --git "a/01\347\277\201\347\253\240\345\275\254/\347\254\224\350\256\260/2022-09-21 \345\207\275\346\225\260.md" "b/01\347\277\201\347\253\240\345\275\254/\347\254\224\350\256\260/2022-09-21 \345\207\275\346\225\260.md" new file mode 100644 index 0000000..7de4a79 --- /dev/null +++ "b/01\347\277\201\347\253\240\345\275\254/\347\254\224\350\256\260/2022-09-21 \345\207\275\346\225\260.md" @@ -0,0 +1,48 @@ +# 函数 + +## 创建 + +```sql +go +create **function** 函数名(变量) +returns 返回类型 + begin + 函数内容 + return 返回的值 + end +go +``` + +## 查看 + +```sql +select dbo.函数名(变量) +``` + +## 删除 + +```sql +drop function age +``` + +## 返回多列 + +```sql +go +create **function** 函数名(变量) +returns @b1 table (列1 类型,列2 类型,列3 类型...) + begin + insert into @b1 + select (列1,列2,列3) from 表名 + --列数量要一致 + return + end +go +``` + +## 查看多列 + +```sql +select * from dbo.函数名(变量) +``` + -- Gitee