SQL你必须知道的-函数及类型转换(一)

2014-11-24 13:14:07 · 作者: · 浏览: 0
SQL你必须知道的-函数及类型转换
use MySchoolTwo www.2cto.com
--ISNULL(expression,value) :如果 expression不为空则返回 expression ,否则返回 value。
select studentId , isnull( english ,0 ) from score
如果 english 值为null 返回
-- 字符串函数
--LEN() :计算字符串长度
select LEN ( '123456')
select LEN ( sName), sName from Student
--LOWER() 、UPPER () :转小写、大写
select LOWER ( 'AcbDFgCD')
select upper ( 'AcbDFgCD')
--LTRIM() :字符串左侧的空格去掉 www.2cto.com
--RTRIM () :字符串右侧的空格去掉
--LTRIM(RTRIM(' bb '))
select len ( ltrim( ' abcd ' )+ '123')
select len ( rtrim( ' abcd ' )+ '123')
select len ( rtrim( ltrim (' abcd ' ))+ '123')
--LEFT() 、RIGHT() 截取取字符串
select LEFT( ' 张三' , 1)
-- 结果+1 = 612346 自动实现类型的转换
select right( 'ipv612345' ,LEN ( 'ipv612345')- 3 ) + 1
--SUBSTRING(string,start_position,length) 从第一位置截取个字符串 ip
-- 参数string 为主字符串, start_position 为子字符串在主字符串中的起始位置, length 为子字符串的最大长度。
select SUBSTRING ( 'ipv612345', 1 ,2 )
-- 查询班内所有学生的姓去除重复
select distinct ( substring( sName ,1 , 1)) from Student
-- 日期函数
--GETDATE() :取得当前日期时间 www.2cto.com
select GETDATE ()
--DATEADD (datepart , number, date ) ,计算增加以后的日期。
-- 参数date 为待计算的日期;参数 number 为增量;参数 datepart为计量单位,可选值如下 :
-- 取值 别名 说明
--year yy,yyyy 年份
--quarter qq,q 季度
--month mm,m 月份
--dayofyear dy,y 当年度的第几天
--day dd,d 日
--week wk,ww 当年度的第几周
--weekday dw,w 星期几
--hour hh 小时
--minute mi,n 分
--second ss,s 秒
--millisecond ms 毫秒
--DATEADD(DAY, 3,date) 为计算日期 date 的天后的日期,
-- 而DATEADD(MONTH ,-8,date) 为计算日期 date 的个月之前的日期
select DATEADD ( MONTH, 1 ,GETDATE ())
select DATEADD ( year,- 1 ,GETDATE ())
select DATEADD ( day, 1 ,GETDATE ())
--quarter 季度 week 一周
select DATEADD ( quarter, 1 ,GETDATE ())
select DATEADD ( week, 1 ,GETDATE ())
--datediff 两个月之间的时间差 一般会用它来计算当前月销售额啊今年的销售额啊之类的
--DATEDIFF ( datepart , startdate , enddate ) :计算两个日期之间的差额。
--datepart 为计量单位,可取值上 DateAdd。
select DATEDIFF ( MONTH, GETDATE (),'2012-12-21' )
select DATEDIFF ( day, GETDATE (),'2012-12-21' )
-- 求当前月的销售记录
-- 意思就是计算 xsjl表中的日期与当前月日期时间差为零的
select * from xsjl where DATEDIFF( MONTH ,date , GETDATE())= 0
-- 统计不同生日年份的学生个数
--year(sBirthday) 获取年份
select COUNT (*), year( sBirthday ) from Student
group by year( sBirthday )
select year ( getdate()) --2011
select month ( getdate())
select day ( getdate())
-- 求每个年龄有多少学生
select COUNT (*), datediff( year ,sBirthday , getdate()) from Student
group by datediff( year ,sBirthday , getdate())
select * from Student
--datename datepart 返回一个日期的特定部分
select DATENAME ( year, getdate ())--2011 但是是字符串类型
select DATEpart ( year, getdate ())--2011 但是是整数
-- 当前日是今年的第几天
select DATENAME ( DAYOFYEAR, GETDATE ())
-- 当前日是今年第几周 48周
select DATENAME ( week, GETDATE ())
-- 返回‘星期四’
select DATENAME ( WEEKDAY, GETDATE ())
-- 返回‘’ 从星期天开始计算的
select datepart ( WEEKDAY, GETDATE ())
-- 类型转换
-- 问题
select ' 平均分数 '+ 123 --无法将 nvarchar 类型转换成为 int
select AVG ( english) from Score -- 平均分数只需要保留两位有效数字
select * from Student --sBirthday 只需精确到日
--CAST ( expression AS data_type)
select ' 平均分数 '+ CAST (123.56 as nvarchar ( 10))
-- 这里默认发生了隐式转换
select right( sNo ,3 )+ 1 from Student
-- 结果同上
select CAST (RIGHT( sNo, 3 ) as int )+ 1 from Student
-- 结果为cast 是不四舍五入的
select CAST ( 123.556 as int)
--