• SQL你必须知道的-函数及类型转换


    use MySchoolTwo   
    --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() :字符串左侧的空格去掉   
    --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() :取得当前日期时间   
    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)   
    -- 如果一定要四舍五入需要使用到 round   
    select ROUND ( 1234.45789, 0 )-- 返回   
    select ROUND ( 1234.65789, 0 )-- 返回   
    -- 需要结合cast 使用去除   
    select CAST ( ROUND( 1234.789 ,0 ) as int )-- 返回   
      
    --cast 结合decimal 使用保留两位小数   
    select CAST ( 1234.789 as decimal( 10 ,2 )) --返回   
    --decimal 后的参数查看帮助文档   
    select CAST ( AVG( english )as decimal( 10 ,2 )) from Score   
    --CONVERT ( data_type, expression)   
    select CONVERT ( int, 1234.56789 )-- 返回不四舍五入   
    select CONVERT ( int, ROUND (1234.5678 , 0)) -- 返回   
    select CONVERT ( decimal( 10 ,2 ), 1234.5678) -- 返回   
    -- 补充使用CONVERT 读取年月日   
    -- 日期只取年月日   
    select GETDATE ()   
    select CONVERT ( nvarchar( 10 ),GETDATE ()) --返回 24 2011   
    -- 需要使用第三个参数指定返回日期格式   
    select CONVERT ( nvarchar( 20 ),GETDATE (), 20) -- 返回14:16:55   
    select CONVERT ( nvarchar( 20 ),GETDATE (), 23) -- 返回   
    -- 修改截取nvarchar 的长度   
    select CONVERT ( nvarchar( 10 ),GETDATE (), 20) -- 返回   
    -- 只取小时分钟秒   
    select CONVERT ( nvarchar( 20 ),GETDATE (), 108) -- 返回:20:02   
    -- 解决以上Student 中 sBirthday格式   
    select sId , sName , sAge , sNo , convert( nvarchar (10 ), sBirthday, 23 )as ''出生日期 '' ,   
    sClassId , sSex , sPhone from Student  

    佛为心,道为骨,儒为表,大度看世界; 技在手,能在身,思在脑,从容过生活; 三千年读史,不外功名利禄; 九万里悟道,终归诗酒田园;
  • 相关阅读:
    图的建立的两种方法(领接矩阵,领接表)
    蛇形填数
    谁买单,猴子选大王等类似题目不同解法!!!
    根据前序中序写后序(正确写法)
    月份牌
    子网掩码
    android 之 surfaceView和普通View的重绘使用
    android 之 Toast通知的使用
    viewSub惰性装载器
    对文件进行加密
  • 原文地址:https://www.cnblogs.com/taofx/p/4137017.html
Copyright © 2020-2023  润新知