1)聚集函数
聚合函数不能出现在WHERE子句中 ,但可以出现在having 后面 或select 后面
COUNT(*):统计表中元组的个数; -- 除COUNT(*)外,其他函数在计算过程中均忽略NULL值(COUNT(1)和COUNT([DISTINCT] <列名>)都会忽略NULL值);
COUNT([DISTINCT] <列名>):统计列值个数;
SUM(<列名>):计算列值的和值(必须是数值型列);
AVG(<列名>):计算列值的平均值(必须是数值型列);
MAX(<列名>):得到列值的最大值;
MIN(<列名>):得到列值的最小值;
2)时间函数
1.格式化的标志位
111 = yy/mm/dd
112 = yymmdd
108 = hh:mm:ss
20 or 120 = yyyy-mm-dd hh:mi:ss
2.获取天:DAY() --函数返回date_expression_r 中的日期值
3.获取月:MONTH() --函数返回date_expression_r 中的月份值
4.获取年:YEAR() --函数返回date_expression_r 中的年份值
5.获取系统时间:getdate() -- 获取当前时间 2021-11-28 09:51:53.110 毫秒级别
6.时间相加:select dateadd(MONTH,12,'2013-02-17 13:20:16')
--日期相加 返回:2014-02-17 13:20:16.000 ,参数month可以改为 day,year等日期加相应的值
7.时间相减:SELECT datediff( day, '1999/07/19', '1999/08/23' ) -- 时间差 year, month, day都可以用
8.时间格式化:select CONVERT(varchar, getdate(), 112 ) -- 时间格式化 20211128 ,注意112是一个编码
9.时间格式替换:select replace(CONVERT(varchar, getdate(), 120 ),'-','/')
-- 注意120是一个编码
-- 格式化后的替换 2021/11/28 10:03:38
如开发中使用:CONVERT(NVARCHAR,GETDATE(),23)
这个23就代表转换为yyyy-mm-dd的样式。
10.转时间戳:SELECT DATEDIFF(SS,'1970-1-1 00:00:00',GETUTCDATE())
--普通时间转换为时间戳(秒) 1638065333s
11.转时间戳:SELECT DATEADD(SS,1638065460,'1970-1-1 08:00:00')
-- 秒时间戳转普通时间 2021-11-28 10:08:53.000
12.获取季度: datepart(q,出院日期)=1 – 表示第一个记录
但这里的季度 12月底的这段时间算第一季度的
3)字符串函数
1.字符串去空额:LTRIM() 把字符串头部的空格去掉。
2.字符串去空额:RTRIM() 把字符串尾部的空格去掉。
3.字符串提取:SUBSTRING (<expression>, <starting_ position>, length)
-- 返回从字符串左边第starting_ position 个字符起length个字符的部分。
4.从左边字符串提取:LEFT (<character_expression>, length)
-- 返回character_expression 左起length个字符。 select left('wqetqwetq',3) – wqe
右边的话就right
5.符串拼接方法:select concat('123','456'); -- 注:SQLServer 2012及更高版本才支持conconcat()函数。
6.符串拼接方法:select '123'+'456'; -- 123456
7.字符串json:select JSON_QUERY('{"uid":"asas02234"}', '$.uid');
-- 目前看到官网 2016版本有这个方法 目前低版本尚且没有测试是否支持该函数
8.SUBSTRING ( '源字符串' , '截取起始位置(含该位置上的字符)' , '截取长度'
9.CHARINDEX(tofind,column[,location]),返回的是tofind字符串的第一个字符出现的位置,索引下标从1开始,不包含返回0
4)数值转换函数
类型转换
select CAST('123' as int) -- 123
select CAST('456.7124' as decimal或numeric ) -- 会四舍五入 ,不会出现小数点
select CAST ( '12' AS numeric(4,2) ) -- 12.00 保留有效数字
select CAST ( '12' AS numeric(4,2) ) -- 12.00 。小数点后面2,并且总长度要小于4
select CAST('788.4' as decimal(8,5)) --小数点后面5,并且总长度要小于8
select round(12.675535,3) -- 3表示,从小数点开始数,有效数字为3位
5)判断函数
1.为空判断:select ISNULL(null,'helloword') -- 返回helloword字符串 判断参数1是否为NULL,
如果是,返回参数2,否则返回参数1。
2.条件判断:if(9>10) print '成立' else print '不成立'
if Exists( select * from table where … ) print ‘存在数据执行sql’ else print ‘不存在数据执行sql’
3.匹配模式:select name, (CASE 11
WHEN '11' THEN '男'
WHEN '22' THEN '女'
ELSE '其他' end ) as sex from Student
4.搜索模式:select name, (CASE
WHEN name='王明' THEN '王一明'
WHEN name='李四' THEN '李一四'
ELSE '其他' end ) as '改名' from Student