最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

T_SQL函数习题及答案(完整版)

来源:动视网 责编:小OO 时间:2025-09-30 22:13:35
文档

T_SQL函数习题及答案(完整版)

作业参:--1.设数据库中有学生成绩表sc(snochar(10),cnochar(5),gradetinyint),设计一个函数Count_course,返回指定学生的选修的课程门数.注意:没有选修时应返回0;createfunctionCount_course(@snochar(10))returnsintasbeginreturn(selectcount(0)fromscwheresno=@sno)end--2.写一个T-sql函数reversion,完成颠倒一个字符串,即:sel
推荐度:
导读作业参:--1.设数据库中有学生成绩表sc(snochar(10),cnochar(5),gradetinyint),设计一个函数Count_course,返回指定学生的选修的课程门数.注意:没有选修时应返回0;createfunctionCount_course(@snochar(10))returnsintasbeginreturn(selectcount(0)fromscwheresno=@sno)end--2.写一个T-sql函数reversion,完成颠倒一个字符串,即:sel
作业参:

--1.设数据库中有学生成绩表sc(sno char(10),cno char(5),grade tinyint),设计一个函数Count_course,返回指定学生的选修的课程门数. 注意:没有选修时应返回0;

create function Count_course

(@sno char(10))

returns int

as begin

  return( select count(0) from sc where sno=@sno)

end

--2.写一个T-sql函数reversion,完成颠倒一个字符串,即:select dbo.reversion('abcd') 输出的结果为 dcba;

create  function reversion

(@str varchar(4000))

returns varchar(4000)

as begin

  declare @ret varchar(4000)

  declare @i int

  set @ret=''

  set @i=len(@str)

while @i>0 begin

  end

  return @ret

end

--select dbo.reversion('abcdefg')

--对照: 下面的算法有错误,当字符串长度超过2000后不能得到正确结果

create alter function reversion2

(@str varchar(4000))

returns varchar(4000)

as begin

  declare @i int, @j int

  set @i=len(@str)

  set @j=len(@str)

while @i>0 begin

  end

  set @str=right(@str,@j)

  return @str

end

--select dbo.reversion2('abcdefg')

--3.写一个函数T-sql函数elimination(a,b)将出现在第一个字符串中的第二个字符串中的所有字符删除,即:select dbo.elimination('abcdefg12345','bd2') 输出为:acefg1345;

create  function elimination

(@a varchar(4000),

@b varchar(4000))

returns varchar(4000)

as begin

  --declare @ret varchar(4000)

  declare @i int

  --set @ret=''

  set @i=1

while @i < len(@b) begin

  end

  return @a

end

--select dbo.elimination('abcdefg12345','bd2')

--4.写一个函数Output_RMB,完成将人民币数值转换为汉字大写,即:select dbo.Output_RMB(4567.12) 输出为:肆仟伍佰陆拾柒元壹角贰分;

/*方法二:推荐使用的方法,支撑两种转换类型

select dbo.Convert_money('20002.45',0)

select dbo.Convert_money('20002.45',1)

*/

Create function Convert_money

(

  @n_LowerMoney numeric(15,2),

  @v_TransType int

)returns varchar(200)

AS

begin  

  Declare @v_LowerStr VARCHAR(200) -- 小写金额

  Declare @v_UpperPart VARCHAR(200)

  Declare @v_UpperStr VARCHAR(200) -- 大写金额

  Declare @i_I int

  select  @v_LowerStr= LTRIM(RTRIM(STR(@n_LowerMoney,20,2))) --四舍五入为指定的精度并删除数据左右空格

  select @i_I = 1

  select @v_UpperStr = ''

while ( @i_I <= len(@v_LowerStr))

  begin

 select @v_UpperPart=case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1) WHEN  '.' THEN  '元'

WHEN  '0' THEN  '零'

 WHEN  '1' THEN  '壹'

 WHEN  '2' THEN  '贰'

 WHEN  '3' THEN  '叁'

 WHEN  '4' THEN  '肆'

WHEN  '5' THEN  '伍'

WHEN  '6' THEN  '陆'

WHEN  '7' THEN  '柒'

WHEN  '8' THEN  '捌'

WHEN  '9' THEN  '玖'

+ case @i_I

  WHEN  1  THEN  '分'

  WHEN  2  THEN  '角'

  WHEN  3  THEN  ''

  WHEN  5  THEN  '拾'

  WHEN  6  THEN  '佰'

 仟'

 万'

  WHEN  9  THEN  '拾'

 WHEN  10  THEN  '佰'

  WHEN  11  THEN  '仟'

  WHEN  12  THEN  '亿'

 拾'

  WHEN  14  THEN  '佰'

  WHEN  15  THEN  '仟'

 WHEN  16  THEN  '万'

  end

  --print  '//v_UpperStr='+@v_UpperStr +'//'

  if ( @v_TransType=0 )

  begin

  @v_UpperStr= REPLACE(@v_UpperStr,'零拾','零')

select @v_UpperStr= REPLACE(@v_UpperStr,'零佰','零')

select @v_UpperStr= REPLACE(@v_UpperStr,'零仟','零')

select @v_UpperStr= REPLACE(@v_UpperStr,'零零零','零')

select @v_UpperStr= REPLACE(@v_UpperStr,'零零','零')

select @v_UpperStr= REPLACE(@v_UpperStr,'零角零分','整')

select @v_UpperStr= REPLACE(@v_UpperStr,'零分','整')

 select @v_UpperStr= REPLACE(@v_UpperStr,'零角','零')

select @v_UpperStr= REPLACE(@v_UpperStr,'零亿零万零元','亿元')

  select @v_UpperStr= REPLACE(@v_UpperStr,'亿零万零元','亿元'

 select @v_UpperStr= REPLACE(@v_UpperStr,'零亿零万','亿')

select @v_UpperStr= REPLACE(@v_UpperStr,'零万零元','万元')

select @v_UpperStr= REPLACE(@v_UpperStr,'万零元','万元')

select @v_UpperStr= REPLACE(@v_UpperStr,'零亿','亿')

select @v_UpperStr= REPLACE(@v_UpperStr,'零万','万')

select @v_UpperStr= REPLACE(@v_UpperStr,'零元','元')

select @v_UpperStr= REPLACE(@v_UpperStr,'零零','零')

  end

  -- 对壹元以下的金额的处理

  if ( substring(@v_UpperStr,1,1)='元' )  begin

  @v_UpperStr= substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

  end

  if (substring(@v_UpperStr,1,1)= '零') begin

  @v_UpperStr= substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

  end

  if (substring(@v_UpperStr,1,1)='角') begin

  @v_UpperStr= substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

  end  

  if ( substring(@v_UpperStr,1,1)='分')  begin

  @v_UpperStr= substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

  end

  if (substring(@v_UpperStr,1,1)='整')begin

 零元整'

  end

  return @v_UpperStr

end

go

/*5.写一个函数Custom_AVG模拟多名裁判打分时求平均值的函数,去掉一个最高分、一个最低分、然后取平均。设数据库表结构为:

  create table player(playerID int, playerName varchar(20))

 create table score(

 id int identity(1,1) primary key,

 playerID int, umpireID int,

  score int check (score between 0 and 100

  然后创建一个视图,视图由两列构成:选手编号playerID和最终所得分

player(playerID  int,playerName varchar(20))

*/

create  function Custom_AVG

(@playerID int)

returns decimal(5,2)

as begin return (select(sum(score)-max(score)-min(score))*1.0/(count(0)-2)

  score where playerID=@playerID)

  /*  或者

  return (select cast((sum(score)-max(score)-min(score))as decimal) /(count(0)-2)

from score where playerID=@playerID)*/

end

go

create view v_grade as

  select playerID, Custom_AVG (playerID) from player

go

/*测试

 create table score(

id int identity(1,1) primary key,

playerID int,

umpireID int,

score int check (score between 0 and 100))

insert into score values(1,1,)

insert into score values(1,2,86)

insert into score values(1,3,85)

insert into score values(1,4,80)

insert into score values(1,5,83)

insert into score values(1,7,85)

select dbo.Custom_AVG(1)

*/

1:创建一个自定义函数,完成将指定时间显示为:xxxx年xx月xx日 xx时xx分xx秒

create  function FormatDate(@date datetime)

returns varchar(50)

begin

 年'

 月'

 日'

 时'

 分'

 秒'

end

select dbo.FormatDate(getdate())

针对给定的数据库XSCJ,完成如下设计:

2:创建一个自定义函数,实现判别学生是否具备毕业资格,返回值为bit类型,毕业资格条件是:总学分>=50;

create function IsGrduate(@sno char(6))

returns bit

begin

end

select dbo.IsGrduate('001204')

select dbo.IsGrduate('001101')

3:用游标完成输出具备毕业资格的学生的选课情况:门数、平均分、最高分、最低分

declare  PutOut cursor 

for

select sno from XS_KC where dbo.IsGrduate(sno)=1

open PutOut

declare @sno char(6)

fetch next from PutOut into @sno

while @@FETCH_STATUS=0

begin

  select sno 学号,count(1) 门数,avg(grade) 平均分,max(grade) 最高分,min(grade) 最低分

  fetch next from PutOut into @sno

end

close PutOut

deallocate PutOut

4:创建一个存储过程sp_addCourse,完成课程信息的添加;

create procedure sp_addCourse

(@cno char(3),

 @cname char(16),

 @term tinyint,

 @hours tinyint,

 @credit tinyint

)

as

  insert into KC values(@cno,@cname,@term,@hours,@credit)

sp_addCourse '23','English',4,32,3

5:创建一个存储过程sp_deleteStudent,删除指定学号的学生;

create procedure sp_deleteStudent

(@sno char(6))

as 

  delete from XS where sno=@sno

sp_deleteStudent '001241'

6:创建一个存储过程,完成学生成绩的保存,

要求提供三个参数@sno,@cno,@grade;

create procedure sp_storeGrade

(@sno char(6),@cno char(3),@grade tinyint)

as 

 insert into XS_KC

sp_storeGrade '001241','101',87

7:创建一个触发器完成课程的学时数只增不减;

create trigger tr_limitUpdate

on KC

after update

as

begin

end

8:创建一个触发器,当输入学生的成绩或成绩发生改变后,

将该学生所得的总学分(XS表中的totalCredit字段)实时修改;

create trigger tr_autoCallTotalCredit

on xs_kc

after insert,update

as

begin

  if update(grade)

end

9:通过触发器,完成一个xs表回收站的功能:当删除xs表的数据后,

将删除后的数据保存到recycle_xs表中。

on xs

after delete

as

begin

  if exists(select 1 from sysobjects where name='xs_recycle'

  else 

end

10:设计一个函数,计算一个字符串在另一个字符串中出现的次数。

create  function countString

(@str1 varchar(100),@str2 varchar(100))

returns int

as

begin

  declare @n int,@I int

  set @n=0

  set @I=1

while @I<=(len(@str1)-len(@str2)+1)

  begin

  end

  return @n

end

select dbo.countString('afhhdfah','afh')

文档

T_SQL函数习题及答案(完整版)

作业参:--1.设数据库中有学生成绩表sc(snochar(10),cnochar(5),gradetinyint),设计一个函数Count_course,返回指定学生的选修的课程门数.注意:没有选修时应返回0;createfunctionCount_course(@snochar(10))returnsintasbeginreturn(selectcount(0)fromscwheresno=@sno)end--2.写一个T-sql函数reversion,完成颠倒一个字符串,即:sel
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top