diff --git "a/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-21/.keep" "b/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-21/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-21/2022-9-21\344\275\234\344\270\232.md" "b/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-21/2022-9-21\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..248048aec87292ed5b3902689ba49d615b5e253d --- /dev/null +++ "b/06\344\275\225\347\235\277/\344\275\234\344\270\232/2022-9-21/2022-9-21\344\275\234\344\270\232.md" @@ -0,0 +1,93 @@ +(1)编写一个函数求该银行的金额总和 select SUM(cardmoney) from BankCard --(2)传入账户编号,返回账户真实姓名 + +```sql +go + + CREATE FUNCTION xmm(@b varchar(20)) RETURNS varchar(20) +AS + +BEGIN + +RETURN (select realname from AccountInfo where AccountId=@b) +END +go +select dbo.xmm(1) +``` + +--(3)传递开始时间和结束时间,返回交易记录(存钱取钱),交易记录中包含 真实姓名,卡号,存钱金额,取钱金额,交易时间。 + + + +```sql +go + + create function xxm(@au date ,@u date) + +returns @ccl table(realname varchar(20),cardno varchar(20),moneyinbank money ,moneyoutbank money,exchangetime date) + +as + +begin + + insert into @ccl + +select realname ,CardExchange.CardNo,moneyinbank ,moneyoutbank ,exchangetime from AccountInfo join BankCard on AccountInfo.accountid= BankCard.AccountId join CardExchange on BankCard.CardNo=CardExchange.CardNo where ExchangeTime between @au and @u + + return + + end go + + select *from dbo.xxm('2022-1-05',GETDATE()) +``` + + --方案一(逻辑复杂,函数内容除了返回结果的sql语句还有其他内容,例如定义变量等): + +--(4)查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”, --根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户",分别显示卡号,身份证,姓名,余额,用户等级,银行卡状态。 + +--方案一:直接在sql语句中使用case when + +--方案二:将等级和状态用函数实现 + +```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 +``` + +--(5)编写函数,根据出生日期求年龄,年龄求实岁,例如: + +-- 生日为2000-5-5,当前为2018-5-4,年龄为17岁 -- 生日为2000-5-5,当前为2018-5-6,年龄为18岁 + +```sql + go + + create function ookl(@p date ,@E date) + + returns int + +begin + +declare @k int + +set @k= YEAR(@E)-YEAR(@p) + + return @k + + end + +go + +select dbo.ookl('2000-5-5','2018-5-4') +``` + diff --git "a/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-21\345\207\275\346\225\260/.keep" "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-21\345\207\275\346\225\260/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-21\345\207\275\346\225\260/2022-09-21 \347\254\224\350\256\260.md" "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-21\345\207\275\346\225\260/2022-09-21 \347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..7de4a7995a79a2f92ae125d055e154c678c33264 --- /dev/null +++ "b/06\344\275\225\347\235\277/\347\254\224\350\256\260/2022-9-21\345\207\275\346\225\260/2022-09-21 \347\254\224\350\256\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.函数名(变量) +``` +