SQL中常常使用到各种函数来方便取值或实现某些特定功能,这里整理了五种常用的函数方便日后查阅:字符串函数、日期函数、数学函数与系统函数、聚合函数
一、字符串函数
- CHARINDEX:查找一个指定的字符串在另一个字符串中的起始位置
第一个参数为匹配字段,第二个参数为被查询的字符串,第三个参数可选,代表从第i个字符开始查询,默认为1
例:SELECT CHARINDEX('123','hao123.com',1)
返回值为4 - LEN:返回传递给它的字符串长度
例:SELECT LEN('SQL Server')
返回值为10 - UPPER:把传递给它的字符串转换为大写
例:SELECT UPPER('sql server')
返回值为SQL SERVER - LTRIM:清除字符左边的空格
例:SELECT LTRIM(' ZhangSan ')
返回值为'ZhangSan ' - RTRIM:清除字符右边的空格
例:SELECT LTRIM(' ZhangSan ')
返回值为' ZhangSan' - RIGHT:从字符串右边返回指定数目的字符
例:SELECT RIGHT('abc.123',3)
返回值为'123' - REPLACE:替换一个字符串中的字符
第一个参数为被查询的字符串,第二个参数为匹配字段,第三个字符为替换字段,当第三个参数为''时,表示删除匹配字段
例:SELECT REPLACE('abc.amn','a','t')
返回值为'tbc.tmn' - STUFF:在一个字符串中,删除指定长度的字符,并在该位插入一个新的字符串
第一个参数为被修改的字符串,第二个参数为删除位置(从1起算),第三个参数为删除的字符个数,第四个参数为替换的字符串,当第四个参数为''时,表示删除指定位置的字符串
例:SELECT STUFF('ABCDEF',2,3,'hao123')
返回值为:Ahao123EF
实例使用:
(1) 截取邮箱名
SELECT LEFT(Email,CHARINDEX('@',Email)-1)
FROM UserInfo WHERE UserName='张三'
(2) 替换字符
SELECT REPLACE('我最喜欢的颜色是白色','白色','蓝色')
(3) 删除字符
SELECT REPLACE('我最喜欢的颜色是白色','白色','')
(4) 修改字符串
SELECT STUFF('ABCDEF',2,3,'hao123')
返回值为:Ahao123EF
二、日期函数
- GETDATE:取得当前的系统日期
例:SELECT GETDATE()
返回值为:今天的日期 2017-04-01 09:21:14.167 - DATEADD:将指定的数值添加到指定的日期部分后的日期
第一个参数表示增量(d表示day),第二个参数为增加次数(可为负数),第三个参数为有效日期
例:SELECT DATEADD(d,5,GETDATE())
返回值为:以当前的日期格式返回2017-04-06 09:26:27.350 - DATEDIFF:两个日期之间的指定日期部分的间隔
第一个参数为增量,第二个参数为起始日期,第三个参数为截止日期
例:SELECT SELECT DATEDIFF(YY,'2008/08/08',GETDATE())
返回值为9 - DATENAME:日期中指定日期部分的字符串形式
例:SELECT DATENAME(dw,'12/13/2014')
返回值为:'Saturday或星期六' - DATEPART:日期中指定日期部分的整数形式
例:SELECT DATEPART(day,'01/15/2015')
返回值为15
[注1] 在对两个DATENAME()相'+'时,是对两个返回的字符串进行拼接;在对两个DATEPART()相'+'时,是对两个返回的数值进行相加。
三、数学函数与系统函数
- RAND:返回从0到1之间的随机float值
- ABS:取数值表达式的绝对值
- CEILING:向上取值
- FLOOR:向下取值
- ROUND:取数值表达式四舍五入为指定精度
- SIGN:对于正数返回+1,对于负数返回-1,对于0返回0
- POWER:取数值表达式的幂值
- SQRT:取浮点表达式的平方根
- CONVERT(int,'12'):string转int
- CONVERT(varchar(2),12):int转string
- CONVERT(varchar(10),GETDATE(),102):将日期型转为字符型
四、聚合函数
特点:
① 返回结果为单行单列
② 要查询的列中如果存在一个使用了聚合函数的列,那么就不允许存在非聚合函数项,如果有那么必须使用分组GROUP BY语句
- SUM():返回表达式中所有数值的总和
空值将被忽略,只能用于数字类型的列 - AVG():返回表达式中所有数值的平均值
空值将被忽略,只能用于数字类型的列 - MAX():返回表达式中的最大值
空值将被忽略,可以用于数字类型及日期时间烈性的列 - MIN():返回表达式中的最小值
空值将被忽略,可以用于数字类型及日期时间烈性的列 - COUNT():返回提供的组或记录集中的计数
- *:对所有的行进行计数,包括空值行