SQL 函数 (代码)
-------------------------
- 时间日期函数 -
-------------------------
日期函数与数学运算函数:
--------------------------------------
1.YEAR、MONTH 和DAY函数:
提取日期值:
SELECT 编号,姓名,性别,生日,
YEAR(生日) AS '出生年份',
MONTH(生日) AS '出生月份',
DAY(生日) AS '出生日'
FROM fun
ORDER BY 编号
--------------------------------------
重新组合提取的日期值:
SELECT 编号,姓名,性别,生日,
CAST(YEAR(生日) AS CHAR(4))+'年'
+CAST(MONTH(生日)AS CHAR(2))+'月'
+CAST(DAY(生日)AS CHAR(2))+'日'
AS '出生年月日'
FROM fun
ORDER BY 编号
--------------------------------------
2.DATEADD 函数的应用:
将当前日期延迟若干天后的日期
SELECT 编号,姓名,性别,生日,
DATEADD(DAY,3,生日)AS '延迟三天为'
FROM fun
ORDER BY 编号
--------------------------------------
3.GETDATE 函数的应用:
获得当前系统时间
SELECT 编号,姓名,性别,生日,
GETDATE() AS '实际日期'
FROM fun
ORDER BY 编号
--------------------------------------
4.DATEDIFF 函数的应用:
获取两个时间的差值
SELECT 货物编号,货物名称,发货日期,收货日期
DATEDIFF (DAY, 发货日期,收货日期) AS '运输天数'
FROM 货物信息表
ORDER BY 编号
--------------------------------------
计算年龄:
SELECT 编号,姓名,性别,生日,
DATEDIFF(YEAR,生日,GETDATE()) AS '年龄'
FROM fun
ORDER BY 编号
--------------------------------------
-------------------------
- CONVERT 转换时间 -
-------------------------
style 的不同取值对应的日期、时间格式:
---------------------------------------------------------------------------
Style(2位表示年份)| Style(4位表示年份) | 输入输出格式
---------------------------------------------------------------------------
0 | 100 | mon dd yyyy hh:miAM(或PM)
---------------------------------------------------------------------------
1 | 101 美国 | mm/dd/yy
---------------------------------------------------------------------------
2 | 102 ANSI | yy-mm-dd
---------------------------------------------------------------------------
3 | 103 英法 | dd/mm/yy
---------------------------------------------------------------------------
4 | 104 德国 | dd.mm.yy
---------------------------------------------------------------------------
5 | 105 意大利 | dd-mm-yy
---------------------------------------------------------------------------
6 | 106 | dd mon yy
---------------------------------------------------------------------------
7 | 107 | mon dd,yy
---------------------------------------------------------------------------
8 | 108 | hh:mm:ss
---------------------------------------------------------------------------
9 | 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
---------------------------------------------------------------------------
10 | 110 美国 | mm-dd-yy
---------------------------------------------------------------------------
11 | 111 日本 | yy/mm/dd
---------------------------------------------------------------------------
12 | 112 ISO | yymmdd
---------------------------------------------------------------------------
13 | 113 欧洲默认值 | dd mon yyyy hh:mi:ss:mmm(24小时制)
---------------------------------------------------------------------------
14 | 114 | hh:mi:ss:mmm(24小时制)
---------------------------------------------------------------------------
20 | 120 ODBC 规范 | yyyy-mm-dd hh:mi:ss(24小时制)
---------------------------------------------------------------------------
21 | 121 | yyyy-mm-dd hh:mi:ss:mmm(24小时制)
---------------------------------------------------------------------------
---------------------------------------------------------------------------
获取当前系统时间:
SELECT CONVERT(VARCHAR,GETDATE(),20)
AS 'time'
--------------------------------------
定义日期的显示格式(一):
SELECT 编号,姓名,性别,生日,
CONVERT(varchar,生日,111) AS '日期格式'
FROM fun
--------------------------------------
定义日期的显示格式(二):
SELECT 编号,姓名,性别,生日,
CONVERT(char,生日,4) AS '日期格式'
FROM fun
--------------------------------------
定义日期的显示格式(三):
SELECT 编号,姓名,性别,生日,
CONVERT(char,生日,12) AS '日期格式'
FROM fun
--------------------------------------
-------------------------
- 数据运算函数 -
-------------------------
常用的数据运算函数:
------------------------------------------------
函数表达式 | 函数返回值
------------------------------------------------
ABS() | 表达式的绝对值
------------------------------------------------
CEILING() | 大于等于表达式的最小值
------------------------------------------------
FLOOR() | 小于等于表达式的最大值
------------------------------------------------
ROUND(,INT) | 以INT位精度的四舍五入的值
------------------------------------------------
SIN() | 角的正弦值
------------------------------------------------
ASIN() | 以弧度表示的正弦的角
------------------------------------------------
COS() | 角的余弦值
------------------------------------------------
ACOS() | 以弧度表示的余弦的脚
------------------------------------------------
TAN() | 角的正切值
------------------------------------------------
ATAN() | 以弧度表示的正切的角
------------------------------------------------
EXP() | 表达式的值数值
------------------------------------------------
SQRT() | 表达式的平方根
------------------------------------------------
SIGN() | 参数的正负号,1(正);0,-1(负)
------------------------------------------------
PI() | π(3.1415926)
------------------------------------------------
RAND() | 0--1之间的随机浮点数
------------------------------------------------
获得表达式的绝对值:
SELECT ABS(-55)
AS '绝对值'
--------------------------------------
使用ROUND 函数:
SELECT 货物编号,货物名称,数量,ROUND(单价,0) AS '货物单价',
数量*单价 AS 总价
FROM 货物信息表
ORDER BY 编号
--------------------------------------
使用CEILING函数和FLOOR函数:
SELECT 货物编号,货物名称,数量,单价,
CELING(单价) AS '价格浮动上限',
FLOOR(单价) AS '价格浮动下限'
FROM 货物信息表
ORDER BY 编号
--------------------------------------
使用正弦与余弦相关函数:
SELECT SIN(30) AS 'SIN(30)',
ASIN(0.5) AS 'ASIN(0.5)',
COS(60) AS 'COS(0.5)',
ACOS(0.45) AS 'ACOS(0.45)'
--------------------------------------
获得对数值:
SELECT LOG(9) AS 求对数值
--------------------------------------
SQRT函数与RAND函数的应用:
SELECT SQRT(9) AS ‘9的平方根’
RAND() AS '得到一个随机数'
--------------------------------------
PI 函数的使用:
SELECT PI() AS PI的值
--------------------------------------
*****************
* 字符串函数 *
*****************
-------------------------------------------------------------
常用的字符串处理函数及其功能:
-------------------------------------------------------------
函数表达式 | 参数及功能
------------------------|------------------------------------
ASCII(char) | 返回字符串表达式最左端字符的ASCII值
------------------------|------------------------------------
CHAR(int) | 将ASCII值转换为字符
------------------------|------------------------------------
LOWER(char) | 将表达式中的字符串全部转换为小写
------------------------|------------------------------------
UPPER(char) | 将表达式中的字符串全部转换为大写
------------------------|------------------------------------
LTRIM(char) | 去掉字符串前端的空格
------------------------|------------------------------------
RTRIM(char) | 去掉字符串末端的空格
------------------------|------------------------------------
LEN(char) | 取字符串的长度
------------------------|------------------------------------
LEFT(char,int) | 截取部分字符串,截取的子串是从字符
| 串最左起,到int个字符的部分
------------------------|------------------------------------
RIGHT(char,int) | 截取部分字符串,截取的子串是从字符
| 串第int个字符起,到最后一个字符
------------------------|------------------------------------
SUBSTRING(,start,length)| 返回部分字符串,返回的子串是从字符
| 串左边第start个字符起,length个字符
------------------------|------------------------------------
CHARINDEX(substring,_) | 返回字符串中某个指定的子串出现的开始
| 位置。substring时所要查找的字符表达
| 式,_ 可以是字符串或列名表达式
------------------------|------------------------------------
REPLICATE(char,int) | 返回一个重复char指定次数的字符串
------------------------|------------------------------------
REVERSE(char) | 颠倒指定字符串字符的排列顺序
------------------------|------------------------------------
REPLACE(char1,char2, | 表示char3替换char1中的char2
char3) |
-------------------------------------------------------------
UPPER 函数的使用:
SELECT TOP 10 供应商编号,UPPER(公司名称) AS 'CompanyName',
UPPER(商品名称) AS 'ContactName'
FROM 供应信息表
--------------------------------------
LOWER 函数的使用:
SELECT TOP 10 供应商编号,LOWER(公司名称) AS 'CompanyName',
LOWER(商品名称) AS 'ContactName'
FROM 供应信息表
--------------------------------------
使用RTRIM 函数去除字符串空格:
SELECT TOP 10 供应商编号,RTRIM(公司名称)+商品名称 AS
'CnmpanyNameAndContactName',
FROM 供应信息表
--------------------------------------
去掉字符串前端空格:
SELECT 编号,姓名,性别,电话,地址
FROM 学生信息表
ORDER BY 编号
--------------------------------------
取字符串长度的函数:
SELECT TOP 10 供应商编号,LEN(公司名称) AS '公司名称长度',
LEN(商品名称) AS '商品名称长度'
FROM 供应信息表
--------------------------------------
LEFT 函数使用:
SELECT 编号,姓名,性别,电话,地址
FROM 学生信息表
WHERE LEFT(地址,3)='吉林省'
--------------------------------------
SUBSTRING 函数的使用:
SELECT 编号,姓名,性别,电话,SUBSTRING(地址,4,2) AS '所在市'
FROM 学生信息表
--------------------------------------
使用REVERSE 函数颠倒字符串的排列顺序:
SELECT TOP 10 供应商编号,公司名称,商品名称,
REVERSE(公司名称) AS '颠倒后的公司名称'
FROM 供应信息表
--------------------------------------
使用REPLACE 函数替换字符串:(将大连换位长春)
SELECT 编号,姓名,性别,电话,地址,
REPLACE(地址,'大连','长春') AS '新地址'
FROM 学生信息表
ORDER BY 编号
--------------------------------------
*****************
* 聚合函数 *
*****************
---------------------------------------
常见的聚合函数:
---------------------------------------
聚合函数 | 结果
-------------|-------------------------
SUM() |所有值的总和
-------------|-------------------------
MAX() |所有值中的最大值
-------------|-------------------------
MIN() |所有之中的最小值
-------------|-------------------------
AVG() |所有值的平均值
-------------|-------------------------
GOUNT() |行数
---------------------------------------
SUM 函数的应用:
SELECT SUM(单价) AS '单价总和'
FROM 货物信息表
--------------------------------------
使用SUM 函数求多列数据的总和:
SELECT SUM(数量) AS '数量总和',
SUM(单价) AS '单价总和',
SUM(数量*单价) AS '货物总价'
FROM 货物信息表
--------------------------------------
MAX 函数的应用:
SELECTMAX(数量) AS '货物数量的最大值',
MAX(单价) AS '单价的最大值'
FROM 货物信息表
--------------------------------------
MAX 函数用于时间类的数据:
SELECT MAX(生日) AS '出生日期'
FROM 学生信息表
--------------------------------------
MAX 函数用于字符类型的数据:
SELECT MAX(姓名) AS '学生名称'
FROM 学生信息表
--------------------------------------
MIN 函数的应用:
SELECT MIN(数量) AS '数量的最小值',
MIN(单价) AS '单价的最小值'
FROM 货物信息表
--------------------------------------
MIN 函数用于事件类型的数据:
SELECT MIN(生日) AS '出生日期'
FROM 学生信息表
--------------------------------------
MIN 函数用于字符类型的数据:
SELECT MIN(姓名) AS '学生姓名'
FROM 学生信息表
--------------------------------------
AVG 函数的应用:
SELECT AVG(数量) AS '货物数量的平均值'
FROM 货物信息表
--------------------------------------
获得满足一定条件数据的平均值:
SELECT AVG(DATEDIFF(YEAR,生日,GETDATE())) AS '平均年龄'
FROM 学生信息表
WHERE 姓名 LIKE '刘%'
--------------------------------------
COUNT 函数的应用:
SELECT COUNT(*) AS '记录总数'
FROM 学生信息表
--------------------------------------
获取多列中所有记录的行数:
SELECT COUNT(姓名) AS '姓名列行数总数',
COUNT(电话) AS '电话列行数总数',
COUNT(地址) AS '地址列行数总数'
FROM 学生信息表
--------------------------------------
获得满足一定条件数据的记录总数:
SELECT COUNT(*) AS '记录总数'
FROM 学生信息表
WHERE 姓名 LIKE '刘%'
--------------------------------------
聚合函数的组合使用:
SELECT MAX(DATEDIFF(YEAR,生日,GETDATE())) AS '最大年龄',
MIN(DATEDIFF(YEAR,生日,GETDATE())) AS '最小年龄',
AVG(DATEDIFF(YEAR,生日,GETDATE())) AS '平均年龄',
COUNT(*) AS '记录总数'
FROM 学生信息表