聚合函数
-> MAX(字段)
-> MIN(字段)
-> AVG(字段)
•-> 在计算时,对于null的数据不计入总是
-> SUM(字段)
-> COUNT(字段)
•-> count(*)计算所有的列、count(字段)不计为null的列
聚合函数会忽略为空的值
-> select的字段可以当做变量名来进行计算
•-> select (english+math)/2 as 平均分 form score
-> 计算时null表示未知,既不是最大,也不是最小,与null的运算结果也为null
1 select name, 2 AVG(score), 3 COUNT(score), 4 COUNT(*), 5 MAX(score), 6 min(score), 7 SUM(score) 8 from 9 Score 10 where 11 name = '张三' 12 group by 13 name; 14 18 select 19 name, 20 score, 21 AVG(score) over() 22 from 23 Score
字符串函数
LEN() :计算字符串长度(字符的个数。)
datalength();//计算字符串所占用的字节数,不属于字符串函数。
LOWER() 、UPPER () :转小写、大写
LTRIM():字符串左侧的空格去掉
RTRIM () :字符串右侧的空格去掉
LTRIM(RTRIM(' bb '))
LEFT()、RIGHT() 截取取字符串
•SELECT LEFT('abcdefg',2) 结果为---ab,左边开始截取2个
SUBSTRING(string,start_position,length)
-> 参数string为主字符串,start_position为子字符串在主字符串中的起始位置,该位子从1开始
-> length为子字符串的最大长度。
-> SELECT SUBSTRING('abcdef111',2,3)结果为--bcd
1 -- 在数据库中存储了订单的编号D000134623321 2 -- 订单编号以D开头并有十位数字 3 select 4 'D' + right('0000000000' + id, 10) as id, 5 name, 6 price 7 from 8 ( 9 values 10 ('123', 'ACER台式电脑', 13566), 11 ('13', '九阳豆浆机', 400), 12 ('9761', '南府电池', 10) 13 ) as tbl(id, name, price)
日期函数
-> 获得系统当前时间:getdate()
•select getdate()
•当前是第几天:select day(getdate())
•当前的年份:select year(getdate())
•当前的月份:select month(getdate())
-> 在当前时间加上一个时间间隔
•dateadd(在哪个部分增加,增加多少,日期)
select datepart(Dw, GETDATE()); --周三,显示的是4 ???? --小时+10 select GETDATE(), DATEADD(HH,10,GETDATE()); --天+10 select GETDATE(), DATEADD(day,10,GETDATE());
l-> 判断两个日期的间隔
•datediff(单位,开始的时间,结束的时间)
-> 实例:将学生按年龄分组
1 select datediff(year,stuBirthdate,getdate()),count(stuId ) 2 from Student group by datediff(year,stuBirthdate,getdate()) 3 order by datediff(year,stuBirthdate,getdate())
1 select 2 * 3 from 4 Student 5 where 6 MONTH(stuBirthdate) = 6--6月份出生的 7 and 8 YEAR(GETDATE()) - YEAR(stuBirthdate) between 19 and 26; 9 10 select 11 * 12 from 13 Student 14 where 15 MONTH(stuBirthdate) = 6 16 and 17 YEAR(GETDATE()) - YEAR(stuBirthdate) in (19, 21, 23, 27);
--为了提高查询的效率,索引字段不应添加方法处理
-- 如果在stuBirthdate上添加了索引,但是如此查询(使用datediff方法)那么索引无效
-> 返回日期的特定部分
•datepart()
•示例:统计学生出生年份和数量(某一年的有多少个)
1 select datepart(year,stuBirthdate),count(*) 2 from student group by datepart(year,stuBirthdate) 3 order by datepart(year,stuBirthdate)
len和datelength区别?
-> datalength()系统函数,计算字节数
-> len()函数,计算字符数
1 select ASCII('abc');--97 2 select ASCII('我');--206 3 select UNICODE('abc');--97 4 select UNICODE('我');--25105 5 6 select CHAR(97);--a 7 select NCHAR(25105);--我 8 9 --len 是字符数(不算空格),datelength是字节数 10 select LEN('1234567890'),LEN('一二三四五六七八九十');--10,10 11 select DATALENGTH('1234567890'), DATALENGTH('一二三四五六七八九十');--10,20 12 select LOWER('aAbBcC'), UPPER('aAbBcC');--小写,大写 13 14 select len(' 123') --6 15 select datalength(RTRIM('123 ')); --3 16 select LEN('123 '); --3 17 select DATALENGTH('123 '); --6
类型转换函数
CAST ( expression AS data_type)
CONVERT ( data_type, expression,[style])
Select ‘您的班级编号’+ 1 错误这里+是数学运算符
•SELECT FIdNumber,
•CAST(RIGHT(sNo,3) AS INTEGER) as 后三位的整数形式,
•CAST(RIGHT(sNo,3) AS INTEGER)+1 as 后三位加1,
•CONVERT(INTEGER,RIGHT(sNo,3))/2 as 后三位除以2
•FROM student
对日期的转换。转换成各种国家格式的日期。
•select convert(varchar(20),getdate(),104)
•Style的格式,查sql帮助。(输入convert函数查询)
•将日期转换为指定格式的字符串。日期→字符串