TuringShine

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

                                                                                                        2017.11.20

1.常用函数
函数名:
 abs返回给定数字表达式的绝对值
 ceiling返回大于或等于指定数值表达式的最小整数
 floor返回小于或等于指定数值表达式的最大整数
 power幂函数,返回指定表达式指定幂的值
 rand返回0-1之间的随机float值

 

操作演示:
 select abs(10),abs(-10)
 结果:10   10
 
 select power(2,3)
 结果:8   
  
 
 select floot(45.266),ceiling(45.266)
 结果:45   46

 select floot(-8.44),seiling(-8.44)
 结果:-9    -8
  ceiling返回大于或等于指定数据表达式的最小整数
  floor返回小于或等于总置顶数值表达式的最大整数

 select rand()
 结果:0.374631290756254
 
 随机产生从0-10之间不重复的整数: 
 1.select floor(rand()*N)   取0到N-1之间   如:cast(floor(rand()*100)as int)生成0-99之间任意一整数
 2.select ceiling(rand()*N)   取1-N之间   如:cast(ceiling(rand()*100)as int)生成0-100之间任意一整数
 

2.字符串函数:
 len 返回指定字符串表达式的字符个数(不是字节)
 substring   子字符串,返回表达式中指定的部分数据 
 upper 大写函数
 lower 小写函数
 char acsii代码转换函数,返回指定acs代码的字符
 acsii ascii函数,返回字符串表达式中最左侧的字符的ascii代码值
 str 将数字类型转换成字符数据
 left 返回字符串左边开始指定个数的字符
 right 返回字符串右边开始指定个数的字符
 

 select len('abcdef') as  '个数'
 结果:6 elc
 substring(字符串表达式,开始位置,长度)
 select substring ('abcdef',2,2)  ---返回b,c
 
 select lower('DKF'),upper('abc')
 结果: dkf ABC

 select char(65),ascii('A')
 结果: A   65
 
 select left('abcdef',4).right('abcdef',4)
 结果:abce  defg

 select str(89.457,6,2)
 结果:89.46
  (将数字数据转换成字符数据)

 str(float型小数[,总长度[,小数点后保留位数的位置]])
  select str(123.451)    返回:   123(123前面有空格)
  select str(123.451,3)  返回:123
  select str(123.451,7,3)  返回:123.451
  select str(123.451,7,1)  返回:123.5
  select str(123.451,5,3)  返回:123.5
  select str(123.451,2)  返回:**
 说明:返回由数字转换成的字符串.返回字符数不到总长度的前面补空格,超过总长度的截断小数位.如果需要截断整数位则返回**
 注意在截断时遵循四舍五入总长度.它包括小数点,符号,数字及空格.默认值位10.小数点后最多保留16位.默认不保留小数点后面的数字
  

3.日期时间函数:
 getdate 返回当前的系统时间和日期
 month 返回代表指定日期月份的整数
 year 返回代表指定日期年份的整数
 day 返回代表指定日期的天的整数
 dateadd 在指定日期加上一段时间的基础上,返回新的datetime值
 datepart返回指定日期中指定部分的整数,yy代表年,mm代表月,dd代表日,dw代表星期等
 datename返回指定日期中指定部分的字符串 


 日期部分缩写的含义:
 year 年 yy,yyyy
 quarter 季 qq,q
 month 月 mm,m
 datoryear 一年中的第几天 dy,y
 day 天 dd,d
 weak 星期 wk,ww
 weekday 一周中第几天的数值 dw,w
 hour 小数 hh
 second 秒 ss,s
 millisecond 毫秒 ms

 
 select getdate()
 select month('03/12/2009')
 select month('2009-09-04')

 select dateadd(day,20,getdate())
 结果:2017-10-10 20:22:24.140
  dateadd(日期部分,数字,日期)
  返回给指定日期加上一个时间间隔的新的日期值
  
 select datepart(yy,getdate()),datename(dw,getdate())
 结果:2017 星期三
 
 datename(日期部分,日期)
 select datename(mm,'2017-12-11')

4.数据类型转化函数:
 cast(表达式 as 数据类型)
 convert(数据类型[长度],表达式[,格式])
 
 例:select cast(123 as varchar)
  返回123
 
 select '年龄:'+cast(23 as varchar) 
  返回 年龄:23
 
 select convert(varchar,gatdate())
  返回 11 12 012 10:21pm
 select convert(varchar,getdate(),101)
  返回 11/12/2012
 
日期类型数据转换为字符数据类型的日期格式的部分样式表:
 不带世纪位数(yy)     带世纪位数(yyyy)        标准          输入/输出

  -               0/100               默认设置      mon dd  yyyy hh:miAM/PM
  1  101        美国   mm  dd  yy
  2  102        ANSI   yy.mm.dd
  3  103      英国/法国   dd/mm/yy
  4  104        德国   dd.mm.yy
  5  105       意大利   dd-mm-yy  
      120        ODBC规范   yyyy-mm-dd hh:mi:ss(24h)
         
...

 

 SQL server 2008日期格式只取年月日:
 select convert(varchar(10),getdate(),120)
 
 1.将你的身份证的出生日期提取出来19900913
  select substring(199811132629,7,8)
 2.将你的手机号码中间的第4位至第7位号码隐藏位****,例如138****9008
  select stuff(tel,4,4,****)
补充:1.stuff:用于删除指定长度的字符串并在指定的起始点插入另一组字符
  语法:stuff(字符串表达式,起始位置,结束位置,替换字符串)
   select stuff(13689568956,4,8,'****####')电话号码
     2.datediff:
 select datediff(YEAR,'2000-12-02',getdate())

     3.从你的身份证号获取年龄: 
  

 

实验练习:

use students
go
--1、定义两个变量@v1定义为长度为8的字符型和整型@v2,@v1赋值“welcome”, @v2赋值200,用select输出@v1和@v2。
declare @v1 char(8),@v2 int set @v1='welcome' set @v2=100 select @v1,@v2

--2、定义两个变量@var1定义为长度为10的字符型和整型@var2,@var1赋值“beautiful”, @var2赋值100,用print输出@var1和@var2。
declare @var1 char(10),@var2 int set @var1='beautiful' set @var2=100 print '@var1为:'+@var1 print '@var2为:'+convert(char(10),@var2)

--3、查询0-100间的随机函数(返回大于或等于指定数的最小整数 )。
select cast(ceiling(rand()*100)as int)

--4、返回当前系统日期和时间。
select getdate()

--5、返回当前系统日期(格式只取年月日,格式为:yy.mm.dd)。
select convert(varchar(10),getdate(),102)
 
--6、返回当前系统日期(格式只取年月日,格式为:mm/dd/yyyy)。
select convert(varchar(10),getdate(),101)

--7、在student表中,加入新的字段“sid”,给每位学生加上身份证号码。查询学生的学号、姓名,及出生年月。出生年月由身份证号的出生日期提取出来(例如:
--身份证号码362330199309013236,输出显示19930901)。
select sno,sname, substring(sid,7,8) as 出生年月 from student

--8、查询学生的学号、姓名,及2060年时的年龄(要求从身份证获取信息)。
select sno,sname,abs(DATEDIFF(YEAR,'2060-01-01',left(right(sid,12),4)))as '2060年时的年龄'  from student

--9、在student表中,加入新的字段“tel”, 给每位学生加上手机号码。查询学生的学号、姓名,及手机号码,并将手机号码中间的第4位至第7位号码隐藏为****(例如:138****9008。)
select sno,sname,STUFF(tel,4,4,'****') as tel from student

--10、根据学生的成绩显示学生成绩的等级,将90~100分的显示为“优秀”,80~90的显示为“好”,70~80的显示为“中等”,60~70的显示为“及格”,其他为“不及格”。
select sno,cno,grade,
       'rank'=case grade/10
        when 10 then '优秀'
        when 9 then '优秀'
        when 8 then '好'
        when 7 then '中等'
        when 6 then '及格'
        else '不及格'
        end
      from sc

--11、计算1到100之间的偶数之和。     
declare @i tinyint,@sum int
 set @sum=0
 set @i=0
 while @i<100
 begin
  set @i=@i+1
  if(@i/2)=0
   continue
  else
   set @sum=@sum+@i
 end  
 select '总和'=@sum
     
--12、计算1+2+…+100的和。
declare
 @a int,@sum int,@csum char(10)
 set @a=1
 set @sum=0
 while @a<= 100
begin
 set @sum = @sum+@a
 set @a=@a+1
 end
 set @csum=convert(char(10),@sum)
 print '1+2+…+100=' + @csum

 

posted on 2017-11-27 17:32  TuringShine  阅读(493)  评论(0编辑  收藏  举报