mysql之数字函数、日期时间函数

数字函数

ROUND(X[,D])
将数字X四舍五入到指定的小数位数D。如果不指定D,则默认为0。如果D是负数,表示从小数点的左边进行四舍五入
例1:SELECT round(1.58),round(1.298, 1);
在这里插入图片描述
SELECT round(1.298, 0),round(23.298, -1);
在这里插入图片描述
TRUNCATE(X,D)
将数字X截断到指定的小数位数D(不四舍五入)。D为0表示不要小数。如果D是负数,表示从小数点的左边进行截断
SELECT truncate(1.999,1),truncate(1.999,0);
在这里插入图片描述
SELECT truncate(-1.999,1),truncate(122,-2);
在这里插入图片描述
MOD(N,M), N % M, N MOD M
返回数字N除以M后的余数
SELECT mod(234, 10),253 % 7,29 MOD 9;
在这里插入图片描述
注意:余数可以有小数。除数为0不抛出异常
SELECT mod(34.5,3),mod(12,0);
在这里插入图片描述
CEIL(X), CEILING(X)
返回不小于X的最小整数
SELECT ceiling(1.23),ceil(-1.23);
在这里插入图片描述
FLOOR(X)
返回不大于X的最大整数
SELECT floor(1.23),floor(-1.23);
在这里插入图片描述
RAND(), RAND(N)
返回一个随机的浮点数v,0 <= v < 1.0。如果指定整数N,则用作种子值,它产生一个可重复的数字序列
CREATE TABLE t (i INT);
INSERT INTO t VALUES (1),(2),(3);
SELECT i, rand() FROM t;
SELECT i, rand(3) FROM t;
SELECT i, rand() FROM t;
SELECT i, rand(3) FROM t;
比较第1条和第3条语句,每次产生的随机数是不同的;比较第2条和第4条语句,每次产生的随机数是相同的
要想得到一个随机整数 R, i <= R < j,可以使用以下表达式: FLOOR(i + RAND() * (j − i))。例如,要得到 7 <= R < 12,使用以下语句:
SELECT floor(7 + (rand() * 5));
当在 WHERE 子句中使用RAND()时,每次当WHERE执行时都要重新计算 RAND()
不能在ORDER BY子句中使用带有随机值的列。但是可以以随机的顺序从表中检索行。例如:
SELECT * FROM players ORDER BY RAND();
ORDER BY RAND()常和LIMIT子句一起使用:
SELECT * FROM table1, table2 WHERE a=b AND c

日期时间函数

MySQL服务器中有3种时区设置:系统时区(保存在system_time_zone系统变量中)、服务器时区(保存在全局系统变量time_zone中)、每个客户端连接的时区(保存在会话变量time_zone中)。其中,客户端时区的设置会影响一些日期时间函数返回值的显示,例如now(), curtime(),curdate(),也影响timestamp列值的显示
默认情况下,客户端和服务器的时区相同,其值为SYSTEM,表示使用系统时区
SELECT @@global.time_zone,@@session.time_zone;
在这里插入图片描述
SHOW VARIABLES LIKE ‘system_time_zone’;
在这里插入图片描述
NOW([fsp]),SYSDATE([fsp])
返回服务器的当前日期和时间。格式有‘YYYY-MM-DD HH:MM:SS’ 或者YYYYMMDDHHMMSS。具体哪种格式依赖于用在字符串还是数字上下文中。fsp指定小数秒的精度,取值0–6
SELECT now();
在这里插入图片描述
SELECT now() + 0;
在这里插入图片描述
SYSDATE函数也返回服务器的当前日期和时间。但是它返回的是函数执行时的时间,而now返回的是语句执行时的时间。一般使用NOW而不用SYSDATE
SELECT now(), sleep(2), now();
在这里插入图片描述
SELECT sysdate(), sleep(2), sysdate(); #两次返回值不同
在这里插入图片描述
客户端时区影响NOW()的返回值显示
SELECT now(), sysdate() ;

在这里插入图片描述
将客户端时区改为0时区
SET @@session.time_zone=’+00:00’;
SELECT now(), sysdate() ;
在这里插入图片描述
NOW()函数的同义词有:CURRENT_TIMESTAMP 、 CURRENT_TIMESTAMP()、LOCALTIMESTAMP 、 LOCALTIMESTAMP()、LOCALTIME 、 LOCALTIME()
CURDATE()

返回服务器的当前日期。格式有‘YYYY-MM-DD’ 或者YYYYMMDD。具体哪种格式依赖于用在字符串还是数字上下文中
SELECT curdate(), curdate() + 2;
在这里插入图片描述
同义词有: CURRENT_DATE 、CURRENT_DATE()
CURTIME([fsp])
返回服务器的当前时间。格式有’HH:MM:SS’ 或者 HHMMSS 。具体哪种格式依赖于用在字符串还是数字上下文中
SELECT curtime(), curtime() + 2;
同义词有:CURRENT_TIME 、 CURRENT_TIME()
在这里插入图片描述
DATE_ADD(date, INTERVAL expr unit),
DATE_SUB(date, INTERVAL expr unit)

分别为给定的日期date加上或减去一个时间间隔值expr。unit是时间间隔的单位(20个)
SELECT now(),date_add(now(), INTERVAL 1 DAY); – 加1天
SELECT now(),date_add(now(), INTERVAL 1 HOUR); – 加1小时
SELECT now(),date_add(now(), INTERVAL 1 MINUTE); – 加1分钟
SELECT now(),date_add(now(), INTERVAL 1 SECOND); – 加1秒
SELECT now(),date_add(now(), INTERVAL 1 MICROSECOND); – 加1毫秒
SELECT now(),date_add(now(), INTERVAL 1 WEEK); – 加1周
SELECT now(),date_add(now(), INTERVAL 1 MONTH); – 加1月
SELECT now(),date_add(now(), INTERVAL 1 QUARTER); – 加1季
SELECT now(),date_add(now(), INTERVAL 1 YEAR); – 加1年
SELECT date_add(‘2100-12-31 23:59:59’,INTERVAL ‘1:1’ MINUTE_SECOND); – 加1分1秒
SELECT date_sub(‘2005-01-01 00:00:00’,INTERVAL ‘1 1:1:1’ DAY_SECOND); – 减1天1小时 1分1秒
不使用函数,也可以写表达式进行日期的加减:
date + INTERVAL expr unit
date - INTERVAL expr unit
例如:
SELECT ‘2008-12-31 23:59:59’ + INTERVAL 1 SECOND;
SELECT ‘2005-01-01’ - INTERVAL 1 SECOND;
DATEDIFF(expr1, expr2)
返回两个日期相减(expr1 − expr2 )相差的天数。只有日期部分参与计算
SELECT datediff(‘2007-12-31 23:59:59’,‘2007-12-30’);
在这里插入图片描述
SELECT datediff(‘2010-11-30 23:59:59’,‘2010-12-31’);
在这里插入图片描述
TIMEDIFF(expr1, expr2)
返回两个日期相减(expr1 − expr2 )相差的时间数。两个参数类型必须相同
SELECT timediff(‘2000:01:01 00:00:00’,‘2000:01:01 00:00:00.000001’);
在这里插入图片描述
SELECT timediff(‘2008-12-31 23:59:59.000001’,‘2008-12-30 01:01:01.000002’);
在这里插入图片描述
选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒
SELECT now(),date(now()); – 日期
SELECT now(),time(now()); – 时间
SELECT now(),year(now()); – 年
SELECT now(),quarter(now()); – 季度
SELECT now(),month(now()); – 月
SELECT now(),week(now()); – 周
SELECT now(),day(now()); – 日
SELECT now(),hour(now()); – 小时
SELECT now(),minute(now()); – 分钟
SELECT now(),second(now()); – 秒
SELECT now(),microsecond(now()); – 微秒
EXTRACT(unit FROM date)
从日期中抽取出某个单独的部分或组合。可以实现上面各个函数实现的功能
SELECT now(),extract(YEAR FROM now()); – 年
SELECT now(),extract(QUARTER FROM now()); – 季度
SELECT now(),extract(MONTH FROM now()); – 月
SELECT now(),extract(WEEK FROM now()); – 周
SELECT now(),extract(DAY FROM now()); – 日
SELECT now(),extract(HOUR FROM now()); – 小时
SELECT now(),extract(MINUTE FROM now()); – 分钟
SELECT now(),extract(SECOND FROM now()); – 秒
SELECT now(),extract(YEAR_MONTH FROM now()); – 年月
SELECT now(),extract(HOUR_MINUTE FROM now()); – 时分
dayofweek(date), dayofmonth(date), dayofyear(date)
分别返回日期在一周、一月、一年中是第几天
SELECT now(),dayofweek(now());
SELECT now(),dayofmonth(now());
SELECT now(),dayofyear(now());
dayname(), monthname()
返回星期和月份名称。名称是中文还是英文的由系统变量lc_time_names控制。默认值是’en_US’
SHOW VARIABLES LIKE ‘lc_time_names’;
SELECT dayname(now()),monthname(now());
SET lc_time_names = ‘zh_CN’;
SELECT dayname(now()),monthname(now());

你可能感兴趣的:(MySQL,mysql数据库,数据库)