SQL函数介绍(聚合,数学, 字符串, 日期时间, 转换,元数据函数)

一.聚合函数

 聚合函数对一组值进行计算并返回单一的值,通常聚合函数会与SELECT语句的GROUP BY子句一同使用,在与GROUP BY子句使用时,聚合函数会为每一个组产生一个单一值,而不会为整个表产生一个单一值。常用的聚合函数及说明

函数名称

说    明

SUM

返回表达式中所有值的和

AVG

计算平均值

MIN

返回表达式的最小值

MAX

返回表达式的最大值

COUNT

返回组中项目的数量

DISTINCT

返回一个集合,并从指定集合中删除重复的元组

 二.数学函数

数学函数可以对数据类型为整型(integer)、实型(real)、浮点型(float)、货币型(money)和smallmoney的列进行操作,通常该函数可以用在SQL语句的表达式中。常用的数学函数及说明

函数名称

说    明

ABS

返回指定数字表达式的绝对值

COS

返回指定的表达式中指定弧度的三角余弦值

COT

返回指定的表达式中指定弧度的三角余切值

PI

返回值为圆周率

POWER

将指定的表达式乘指定次方

RAND

返回0~1之间的随机float数

ROUND

将数字表达式四舍五入为指定的长度或精度

SIGN

返回指定表达式的零(0)、正号(+1)或负号(-1)

SIN

返回指定的表达式中指定弧度的三角正弦值

SQUARE

返回指定表达式的平方

SQRT

返回指定表达式的平方根

TAN

返回指定的表达式中指定弧度的三角正切值

 三.字符串函数

 字符串函数作用于char、varchar、binary和varbinary数据类型以及可以隐式转换为char或varchar的数据类型。通常字符串函数可以用在SQL语句的表达式中。常用的字符串函数及说明。

 

四.日期函数

常用的日期时间函数及说明

函 数 名 称

说 明

DATEADD

在向指定日期加上一段时间的基础上,返回新的datetime值

DATEDIFF

返回跨两个指定日期的日期和时间边界数

GETDATE

返回当前系统日期和时间

DAY

返回指定日期中的天的整数

MONTH

返回指定日期中的月份的整数

YEAR

返回指定日期中的年份的整数

 五.转换函数

当遇到类型转换的问题时,可以使用SQL Server所提供的CAST和CONVERT函数(显式转换)进行转换。这两种函数不但可以将指定的数据类型转换为另一种数据类型,还可用来获得各种特殊的数据格式

六.元数据函数

元数据函数描述了数据的结构和意义,它主要用于返回数据库中的相应信息

 以下是所有函数的代码实现

CREATE DATABASE DB_StudentInforM
ON PRIMARY(
NAME='DB_StudentInforM.MDF',
FILENAME='F:\SQL Server数据库\DB_StudentInforM.MDF',
SIZE=8MB,
FILEGROWTH=20%,
MAXSIZE=UNLIMITED
)
LOG ON(
NAME='DB_StudentInforM.LDF',
FILENAME='F:\SQL Server数据库\DB_StudentInforM.LDF',
SIZE=8MB,
FILEGROWTH=10%,
MAXSIZE=UNLIMITED
)
CREATE TABLE StudentInf
(
  姓名 VARCHAR(10) NOT NULL,
  学号 INT NOT NULL,
  年龄 INT  NULL,
  成绩 INT NULL
)
INSERT INTO StudentInf
SELECT '张三',1001,22,92 UNION
SELECT '李四',1002,20,90 UNION
SELECT '王五',1003,23,92 UNION
SELECT '小黄',1004,21,87 UNION
SELECT '小红',1005,25,75 UNION
SELECT '小兰',1006,20,98 UNION
SELECT '小明',1007,18,110 UNION
SELECT '小四',1008,17,87 
SELECT * FROM StudentInf
DELETE StudentInf

--聚合函数:SUM,AVG,MAX,MIN,COUNT,DISTINCT(取不重复记录),HAVING(查询重复记录)
SELECT SUM(成绩) AS 总成绩 FROM StudentInf
SELECT AVG(成绩) AS 平均成绩 FROM StudentInf
SELECT MAX(成绩) AS 最高分 FROM StudentInf
SELECT MIN(成绩) AS 最低分 FROM StudentInf
SELECT COUNT(学号) 总人数 FROM StudentInf
SELECT DISTINCT(成绩) FROM StudentInf
SELECT 成绩,COUNT(成绩) AS 重复数量 FROM StudentInf GROUP BY 成绩 HAVING COUNT(成绩)>1
--数学函数:分为整型(integer)、实型(real)、浮点型(float)、货币型(money)和smallmoney
--1.ABS	返回指定数字表达式的绝对值
SELECT ABS(2.5) AS "2.5的绝对值",
ABS(0.0) AS "0.0的绝对值",
ABS(-2.5) AS "-2.5的绝对值"
--2.PI	返回值为圆周率
SELECT PI() AS "圆周率"
--3.POWER	将指定的表达式乘指定次方
SELECT POWER(2,2) AS "2的平方结果",
POWER(3,3) AS "3的3次幂结果",
POWER(4,4) AS "4的4次幂结果"
--4.RAND	返回0~1之间的随机float数,如果未指定 seed,则随机分配种子值
SELECT RAND(),RAND(),RAND()
SELECT RAND(100),RAND(50.8),RAND(255)
--5.ROUND	将数字表达式四舍五入为指定的长度或精度
SELECT ROUND(128.939,1),ROUND(125.578,1)
--6.SQUARE	返回指定表达式的平方
SELECT SQUARE(8) AS "8的平方"
--7.SQRT	返回指定表达式的平方根
SELECT SQRT(9)AS "9的平方根"
--8.COS	返回指定的表达式中指定弧度的三角余弦值
DECLARE @angle FLOAT
SET @angle=35
SELECT CONVERT(varchar,COS(@angle)) AS COS的值
--9.COT	返回指定的表达式中指定弧度的三角余切值
DECLARE @angle1 FLOAT
SET @angle1=90
SELECT CONVERT(varchar,COT(@angle1)) AS COS的值
--10.SIN	返回指定的表达式中指定弧度的三角正弦值
DECLARE @angle2 FLOAT
SET @angle2=180
SELECT CONVERT(varchar,SIN(@angle2)) AS COS的值
--11.TAN	返回指定的表达式中指定弧度的三角正切值
DECLARE @angle3 FLOAT
SET @angle3=270
SELECT CONVERT(varchar,TAN(@angle3)) AS COS的值

--字符串函数:ASCII,CHARINDEX,LEFT,LEN,REPLACE,REVERSE,RIGHT,RIGHT,STR,SUBSTRING
--1.ASCII:返回字符表达式最左端字符的ASCII代码值
SELECT ASCII('HELLO');
DECLARE @position int,@string char(3)
SET @position=1
SET @string='nxt'
WHILE @position<=DATALENGTH(@string)
BEGIN
SELECT ASCII(SUBSTRING(@string,@position,1))
END
--2.CHARINDEX	返回字符串中指定表达式的起始位置
SELECT CHARINDEX('明',姓名)AS "起始位置"FROM StudentInf WHERE 学号=1007
--3.LEFT	从左边开始,取得字符串左边指定个数的字符
SELECT LEFT('西安交通大学',3)
SELECT 姓名,学号 FROM StudentInf
SELECT LEFT(姓名,1)AS"姓氏",
COUNT(LEFT(姓名,1))AS"数量"FROM StudentInf GROUP BY(LEFT(姓名,1))
--4.LEN	返回指定字符串的字符(而不是字节)长度
SELECT LEN('西安交通大学')
--5.REPLACE	将指定的字符串替换为另一指定的字符串
SELECT REPLACE('I LIKE YOU','LIKE','LOVE')
--6.REVERSE	返回字符表达式的反转
SELECT REVERSE('HELLO WORLD')AS"翻转结果"
--7.STR	返回由数字数据转换来的字符数据(当表达式超出指定长度时,字符串为指定长度返回 **)
SELECT STR(123.45)AS"STR",
STR(123.45,2,2)AS"STR",
STR(123.45,3,2)AS"STR",
STR(123.45,5,1)AS"STR"
--8.SUBSTRING	返回指定个数的字符 从第二位开始截取,共5位
SELECT SUBSTRING('曾经小小少年',2,5)AS "编号"

--日期函数:DATEADD,DATEDIFF,GETDATE,DAY,MONTH,YEAR
--1.DATEADD:将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的时间值
--在现在时间上加上一个月
SELECT GETDATE()AS "当前时间"
SELECT DATEADD(MONTH,1,GETDATE())AS "追加时间"
--2.DATEDIFF:用于返回日期和时间的边界数
--返回两个日期之间的天数
SELECT DATEDIFF(DAY,'2019-1-1','2019-2-22')AS "相差天数"
--3.GETDATE:返回系统的当前日期
SELECT GETDATE()AS"当前时间"
--4. DAY:返回一个整数,表示日期的“日”部分
SELECT DAY('2019-2-22')AS"DAY"
--5.MONTH:
SELECT MONTH(GETDATE())AS"MONTH"
--6.YEAR
SELECT YEAR(GETDATE())AS"YEAR"

--转换函数:CAST,Convert,
--1.CAST:用于将某种数据类型的表达式显示转换为另一种数据类型
SELECT CAST('SUNSHINE'AS varchar(5))AS"结果"
--2.Convert:可以按照指定的格式将数据转换为另一种数据类型
SELECT GETDATE()AS"当前系统时间",
CAST(GETDATE()AS datetime)AS"CAST转换",
CONVERT(datetime,GETDATE(),126)AS"CONVERT转换"
--元函数:COL_LENGTH,COL_NAME,DB_NAME,OBJECT_ID
--1.COL_LENGTH:用于返回列的定义长度
SELECT COL_LENGTH('StudentInf','学号')AS "结果"
--2.COL_NAME:根据指定的对应表标识号和列标识号返回列的名称
SELECT COL_NAME(OBJECT_ID('StudentInf'),2)AS"列名称"
--3.DB_NAME:返回数据库名称
SELECT DB_NAME()

猜你喜欢

转载自blog.csdn.net/qq_43552118/article/details/87881223