数值函数

函数

作用

ROUND(数字[,保留位数])

根据指定的保留位数对小数进行四舍五入,如果不指定保留位数,则小数点之后的数字全部进行全部四舍五入

TRUNCATE(数字[,截取位数])

保留指定位数的小数,如果不指定,则表示不保留


CEIL(数字),CEILING(数字)

对小数向上取整

FLOOR(数字)

对小数向下取整

RAND([n])

随机返回0到1.0之间的小数,如果指定n每次产生的就都是重复的

数值函数都是对数据的操作

-- 根据指定的保留位数对小数进行四舍五入
-- 如果不指定保留位数 则小数点之后的数字全部进行全部四舍五入
SELECT ROUND(3.643782);

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql判断时间大于某个日期

-- 根据指定的保留位数对小数进行四舍五入 第二个参数指定保留几位小数
SELECT ROUND(3.643782), ROUND(3.643782, 2);

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_02

-- 对整数向上取整 -n就是把数字的几位变成0 -1就是把数字的个位变成0
SELECT ROUND(789, -1),ROUND(800, -2),ROUND(800, -3),ROUND(800, -4);

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql判断时间大于某个日期_03

TRUNCATE 和 ROUND 类似,TRUNCATE 没有一个参数的版本,TRUNCATE 是截取,不是保留几位小数

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql判断时间大于某个日期_04

-- 保留指定位数的小数,如果不指定,则表示不保留 截取 0 是指只保留整数部分,不会四舍五入
SELECT TRUNCATE(3.643782, 0);

-- 对整数向下取整
SELECT TRUNCATE(789, -1),TRUNCATE(789, -2),TRUNCATE(789, -3);

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_05

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_06

-- 对小数向上取整 返回第一个比小数大的整数
SELECT CEIL(1.2);

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_07

-- 对小数向下取整 返回第一个比小数小的整数
SELECT FLOOR(1.2);

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_08

RAND([n])

随机返回0到1.0之间的小数,如果指定n每次产生的就都是重复的

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_09

通过数据库的函数,生成一个六位数字的随机验证码

-- SQL表 --

-- 生成一个六位数字的随机验证码
-- 乘以100w得到六位数字
SELECT RAND() * 1000000;
-- 截断
SELECT TRUNCATE(RAND() * 1000000,0);
-- 以上步骤截取几次出现5位 由于生成的是0到1.0之间的小数 0.078380也属于这个范围内
-- 可以使用字符串填充在前面填充一个0
SELECT LPAD(TRUNCATE(RAND() * 1000000,0),6,'0');

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_10

日期和时间函数

函数

作用

CURDATE(),CURRENT_DATE()

返回当前日期

CURTIME(),CURRENT_TIME()

返回当前时间

NOW(),CURRENT_TIMESTAMP(),LOCALTIME(), SYSDATE(),LOCALTIMESTAMP()

返回会当前日期和事件

YEAR(日期)

返回日期中的年份

MONTH(日期)

返回日期中的月份[1,12]

DAY(日期)

返回日期中的天[1,31]

HOUR(时间)

返回时间中的小时

MINUTE(时间)

返回实践中的分钟

SECOND(时间)

返回时间中的秒

DAYOFWEEK(日期)

返回星期几,1星期日,2星期一

WEEKDAY(日期)

返回星期几,0星期一,1星期二

DAYOFYEAR(日期)

计算指定日期是本年第几天

DAYOFMONTH(日期)

计算指定日期是本月第几天

QUARTER(日期)

计算指定日期是第几季度

TIME_TO_SEC(time)

将指定时间转换为秒

SEC_TO_TIME(sec)

将以秒为单位的时间转换为时分秒的格式

DATEDIFF(d1,d2)

计算两个日期相隔的天数

ADDDATE(date,n)

计算指定日期加上n天后的日期

SUBDATE(date,n)

计算指定日期减去n天后的日期

ADDTIME(time,n)

计算指定时间加上n秒后的时间

SUBTIME(time,n)

计算指定时间减去n秒后的时间

DATE_FORMAT(date,f)

按格式返回日期

TIME_FORMAT(time,f)

按格式返回时间

获取当前时间或者日期 

SELECT CURTIME(),CURDATE();

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_11

有多种方式,任选一种即可

-- 获取当前时间或者日期
SELECT CURTIME(),CURRENT_TIME,CURRENT_TIME(),CURDATE(),CURRENT_DATE,CURRENT_DATE();

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_12

获取当前时间和日期 

-- 获取当前时间和日期
SELECT NOW();

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_13

获取日期中的信息 

SELECT 
YEAR(CURDATE()),    #获取年
MONTH(CURDATE()),   #获取月
DAY(CURDATE())	    #获取天
;

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_14

-- 获取日期中的信息
SELECT 
DAYOFWEEK(CURDATE()),  #获取指定日期是星期几
DAYOFYEAR(CURDATE()),  #获取指定日期是本年的第几天
QUARTER(CURDATE())     #获取指定日期是本年的第几个季度 一年有4个季度 每3个月为1季度
;

DAYOFWEEK(CURDATE())  #获取指定日期是星期几,如果是 1 的话,代表星期日,如果是 2 的话,代表星期一,以此类推

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_15

mysql判断时间大于某个日期 mysql条件判断时间范围_数据库_16

获取时间中的信息

SELECT 
HOUR('16:23:28'),	   #获取时
MINUTE('16:23:28'),	   #获取分
SECOND('16:23:28')	   #获取秒
;

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_17

将指定的时间转换为秒

SELECT 
TIME_TO_SEC('1:05'),	
TIME_TO_SEC('1:00:01')
;

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_18

将指定的秒数转为时间

SELECT 
SEC_TO_TIME(3601)
;

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_19

计算时间加上、减去某个时间的结果

SELECT 
ADDTIME(CURTIME(),'5:00:00'),
SUBTIME(CURTIME(),'5:00:00')
;

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_20

计算日期加上、减去 n 天后的结果

SELECT 
ADDDATE(CURDATE(),2),
SUBDATE(CURDATE(),2)
;

mysql判断时间大于某个日期 mysql条件判断时间范围_数据库_21

格式化显示日期或时间

SELECT  
DATE_FORMAT(CURDATE(),'%y-%m-%d'), 	#如果是小写显示2位数字
DATE_FORMAT(CURDATE(),'%Y-%m-%d')   #如果是大写显示4位数字
;

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_22

SELECT  
TIME_FORMAT(CURTIME(),'%h:%i:%s'), 		#如果是小写显示12小时制
TIME_FORMAT(CURTIME(),'%H:%i:%s')		#如果是大写显示24小时制
;

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_23

条件判断函数

函数

作用

IF(expr,v1,v2)

如果表达式expr成立,返回结果v1;否则,返回结果v2。

IFNULL(v1,v2)

判断某一个值是不是为空,如果v1的值不为NULL,则返回v1,否则返回v2

CASE

分支(详见下面)

  • IF(expr,v1,v2)
SELECT IF(1>0,'true','false');
->true
  • IFNULL(v1,v2)
SELECT IFNULL(NULL,'maye');
->maye
  • CASE语法 1
CASE
	WHEN expr1 THEN V1
	WHEN expr2 THEN V2
	...
	ELSE vn
END
SELECT CASE 
  WHEN 1 > 0
  THEN '1 > 0'
  WHEN 2 > 0
  THEN '2 > 0'
  ELSE '3 > 0'
  END
->1 > 0

语法 2

CASE expr 
  WHEN e1 THEN v1
  WHEN e1 THEN v1
  ...
  ELSE vn
END
SELECT CASE 1 
  WHEN 1 THEN '我是1'
  WHEN 2 THEN '我是2'
ELSE '你是谁'

IF

查看 emp 表中,佣金为 NULL 的员工,如果为 NULL,则显示不是销售

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_24

SELECT ename,sal,IF(comm,'销售','不是销售') AS 'IF' FROM emp;

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_25

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_26

IFNULL

SELECT ename,sal,IFNULL(comm,'不是销售') AS 'IF' FROM emp;

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_27

CASE

注意 CASE 需要闭合 END,一旦某个条件成立,下面就不会匹配了

语法 1

SELECT 
CASE 
	WHEN 1>0 THEN '1>0'
	WHEN 2>1 THEN '2>1'
	ELSE '未知'
END;

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_28

语法 2

SELECT ename,sal,comm,
CASE sal
	WHEN 800  THEN '低级'
	WHEN 3000 THEN '中等'
	WHEN 5000 THEN '高级'
	ELSE '其他'
END 
FROM emp;

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_29

系统信息函数

系统信息函数用来查询MySQL数据库的系统信息。

函数

作用

VERSION()

返回数据库的版本号

CONNECTION_ID()

返回数据库连接的ID、每一个用户连接数据库都有一个唯一的标识

DATABASE()、SCHEMA

返回当前数据库名

USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()、CURRENT_USER

返回当前登录数据库的用户

CHARSET(str)

返回字符串str的字符集

COLLATION(str)

返回字符串str的字符排列方式、多个字符串是根据什么规则比较的、比较准则

获取数据库版本号

-- 获取数据库版本号
SELECT VERSION();

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_30

获取数据库连接 ID

-- 获取数据库连接ID
SELECT CONNECTION_ID();

mysql判断时间大于某个日期 mysql条件判断时间范围_sql_31

获取数据库名 

-- 获取数据库名
SELECT DATABASE(),SCHEMA();

mysql判断时间大于某个日期 mysql条件判断时间范围_数据库_32

获取用户名称

-- 获取用户名称 @localhost表示数据库在本地登录
SELECT USER();

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql判断时间大于某个日期_33

查看字符串字符集

-- 查看字符串字符集 随意写入一个字符串得到字符集 b4 就是 bite 4 个字节存储
SELECT CHARSET('A');

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_34

字符串排序规则

-- 字符串排序规则 随意写入一个字符串得到字符串排序规则 默认以字典序排列
SELECT COLLATION('a');

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_35

加密函数

加密函数是MySQL用来对数据进行加密的函数。一般要加密的数据就是我们的密码,例如我们要存储一些用户的信息,不可能把用户密码的明文存储在数据库里面。

函数

作用

MD5(str)

对字符串str进行散列,可以用于一些普通的不需要解密的数据加密,如密码,相对于sha1弱

sha1

对字符串str进行散列,可以用于一些普通的不需要解密的数据加密,如密码,比MD5更安全

-- '12345678'叫作明文 字符串加密得到一串密文
SELECT MD5('12345678');

mysql判断时间大于某个日期 mysql条件判断时间范围_数据库_36

-- 字符串加密 SHA1 得到的密文更长更安全
SELECT SHA1('12345678');

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_37

数据库里面存储的密文,那我们怎么知道用户输入的密码对不对呢?

再对用户明文输入的密码进行加密如果和数据库里面存储的密文一样就是匹配的,对同一个字符串无论加密多少次都是一样的

其他函数

进制转换

函数

作用

BIN(x)

返回x的二进制

HEX(x)

返回x的十六进制

OCT(x)

返回x的八进制

CONV(x,from_base,to_base)

将from_base进制的x,转成to_base进制

-- 进制转换
SELECT 
BIN(10),	   #二进制
HEX(15),	   #十六进制
OCT(10),	   #八进制
CONV(15,16,10) #把十六进制的15变成十进制的15
;

mysql判断时间大于某个日期 mysql条件判断时间范围_mysql_38

IP地址转换

函数

作用

INET_ATON(IP)

将点分十进制的IP地址转为数字

INET_NTOA(number)

将数字形式的IP转为点分十进制

数字形式我们看不懂,需要把它转换点分十进制,但是实际上计算机使用的是点分十进制

SELECT INET_ATON('192.168.0.1')
    ->3232235521
SELECT INET_NTOA(3232235521)
    ->192.168.0.1

-- IP地址转换
SELECT 
INET_ATON('127.0.0.1'), #把点分十进制的IP转换成数字
INET_NTOA(2130706433)   #将数字的IP转换成点分十进制
;

mysql判断时间大于某个日期 mysql条件判断时间范围_字符串_39