zoukankan      html  css  js  c++  java
  • 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  

    佛为心,道为骨,儒为表,大度看世界; 技在手,能在身,思在脑,从容过生活; 三千年读史,不外功名利禄; 九万里悟道,终归诗酒田园;
  • 相关阅读:
    HDU 5273 Dylans loves sequence 暴力递推
    HDU 5285 wyh2000 and pupil 判二分图+贪心
    HDU 5281 Senior's Gun 贪心
    HDU 5651 xiaoxin juju needs help 逆元
    HDU 5646 DZY Loves Partition
    HDU 5366 The mook jong
    HDU 5391Z ball in Tina Town 数论
    HDU 5418 Victor and World 允许多次经过的TSP
    HDU 5642 King's Order dp
    抽屉原理
  • 原文地址:https://www.cnblogs.com/taofx/p/4137017.html
Copyright © 2011-2022 走看看