子沐课堂 2017-02-20 09:56

Mysql自定义函数

1.数学函数

数学函数主要用于处理数字,包括整型、浮点数等。

函数 作用
ABS(x) 返回x的绝对值  SELECT ABS(-1) -- 返回1
CEIL(x),CEILING(x) 返回大于或等于x的最小整数  SELECT CEIL(1.5) -- 返回2
FLOOR(x) 返回小于或等于x的最大整数  SELECT FLOOR(1.5) -- 返回1
RAND() 返回0->1的随机数  SELECT RAND() --0.93099315644334
RAND(x) 返回0->1的随机数,x值相同时返回的随机数相同  SELECT RAND(2) --1.5865798029924
SIGN(x) 返回x的符号,x是负数、0、正数分别返回-1、0和1  SELECT SIGN(-10) -- (-1)
PI() 返回圆周率(3.141593)  SELECT PI() --3.141593
TRUNCATE(x,y) 返回数值x保留到小数点后y位的值(与ROUND最大的区别是不会进行四舍五入)  SELECT TRUNCATE(1.23456,3) -- 1.234
ROUND(x) 返回离x最近的整数  SELECT ROUND(1.23456) --1
ROUND(x,y) 保留x小数点后y位的值,但截断时要进行四舍五入  SELECT ROUND(1.23456,3) -- 1.235
POW(x,y).POWER(x,y) 返回x的y次方  SELECT POW(2,3) -- 8
SQRT(x) 返回x的平方根  SELECT SQRT(25) -- 5
EXP(x) 返回e的x次方  SELECT EXP(3) -- 20.085536923188
MOD(x,y) 返回x除以y以后的余数  SELECT MOD(5,2) -- 1
LOG(x) 返回自然对数(以e为底的对数)  SELECT LOG(20.085536923188) -- 3
LOG10(x) 返回以10为底的对数  SELECT LOG10(100) -- 2
RADIANS(x) 将角度转换为弧度  SELECT RADIANS(180) -- 3.1415926535898
DEGREES(x) 将弧度转换为角度  SELECT DEGREES(3.1415926535898) -- 180
SIN(x) 求正弦值(参数是弧度)  SELECT SIN(RADIANS(30)) -- 0.5
ASIN(x) 求反正弦值(参数是弧度)
COS(x) 求余弦值(参数是弧度)
ACOS(x) 求反余弦值(参数是弧度)
TAN(x) 求正切值(参数是弧度)
ATAN(x) ATAN2(x) 求反正切值(参数是弧度)
COT(x) 求余切值(参数是弧度)

2.字符串函数

字符串函数是MySQL中最常用的一类函数,字符串函数主要用于处理表中的字符串。

函数 说明
CHAR_LENGTH(s) 返回字符串s的字符数SELECT CHAR_LENGTH('你好123') -- 5
LENGTH(s) 返回字符串s的长度SELECT LENGTH('你好123') -- 9
CONCAT(s1,s2,...) 将字符串s1,s2等多个字符串合并为一个字符串SELECT CONCAT('12','34') -- 1234
CONCAT_WS(x,s1,s2,...) 同CONCAT(s1,s2,...)函数,但是每个字符串直接要加上xSELECT CONCAT_WS('@','12','34') -- 12@34
INSERT(s1,x,len,s2) 将字符串s2替换s1的x位置开始长度为len的字符串SELECT INSERT('12345',1,3,'abc') -- abc45
UPPER(s),UCAASE(S) 将字符串s的所有字母变成大写字母SELECT UPPER('abc') -- ABC
LOWER(s),LCASE(s) 将字符串s的所有字母变成小写字母SELECT LOWER('ABC') -- abc
LEFT(s,n) 返回字符串s的前n个字符SELECT LEFT('abcde',2) -- ab
RIGHT(s,n) 返回字符串s的后n个字符SELECT RIGHT('abcde',2) -- de
LPAD(s1,len,s2) 字符串s2来填充s1的开始处,使字符串长度达到lenSELECT LPAD('abc',5,'xx') -- xxabc
RPAD(s1,len,s2) 字符串s2来填充s1的结尾处,使字符串的长度达到lenSELECT RPAD('abc',5,'xx') -- abcxx
LTRIM(s) 去掉字符串s开始处的空格
RTRIM(s) 去掉字符串s结尾处的空格
TRIM(s) 去掉字符串s开始和结尾处的空格
TRIM(s1 FROM s) 去掉字符串s中开始处和结尾处的字符串s1SELECT TRIM('@' FROM '@@abc@@') -- abc
REPEAT(s,n) 将字符串s重复n次SELECT REPEAT('ab',3) -- ababab
SPACE(n) 返回n个空格
REPLACE(s,s1,s2) 将字符串s2替代字符串s中的字符串s1SELECT REPLACE('abc','a','x') --xbc
STRCMP(s1,s2) 比较字符串s1和s2
SUBSTRING(s,n,len) 获取从字符串s中的第n个位置开始长度为len的字符串
MID(s,n,len) 同SUBSTRING(s,n,len)
LOCATE(s1,s),POSITION(s1 IN s) 从字符串s中获取s1的开始位置SELECT LOCATE('b', 'abc') -- 2
INSTR(s,s1) 从字符串s中获取s1的开始位置SELECT INSTR('abc','b') -- 2
REVERSE(s) 将字符串s的顺序反过来SELECT REVERSE('abc') -- cba
ELT(n,s1,s2,...) 返回第n个字符串SELECT ELT(2,'a','b','c') -- b
EXPORT_SET(x,s1,s2) 返回一个字符串,在这里对于在“bits”中设定每一位,你得到一个“on”字符串,并且对于每个复位(reset)的位,你得到一个 “off”字符串。每个字符串用“separator”分隔(缺省“,”),并且只有“bits”的“number_of_bits” (缺省64)位被使用。SELECT EXPORT_SET(5,'Y','N',',',4) -- Y,N,Y,N
FIELD(s,s1,s2...) 返回第一个与字符串s匹配的字符串位置SELECT FIELD('c','a','b','c') -- 3
FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配的字符串的位置
MAKE_SET(x,s1,s2) 返回一个集合 (包含由“,”字符分隔的子串组成的一个 字符串),由相应的位在bits集合中的的字符串组成。str1对应于位0,str2对 应位1,等等。SELECT MAKE_SET(1|4,'a','b','c'); -- a,c
SUBSTRING_INDEX 返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回第count个字符左边的字符串。如果count是负数,返回第(count的绝对值(从右边数))个字符右边的字符串。SELECT SUBSTRING_INDEX('a*b','*',1) -- aSELECT SUBSTRING_INDEX('a*b','*',-1)-- bSELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1) -- c
LOAD_FILE(file_name) 读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,而且你必须有file权 限。文件必须所有内容都是可读的并且小于max_allowed_packet。 如果文件不存在或由于上面原因之一不能被读出,函数返回NULL。

3.日期时间函数

MySQL的日期和时间函数主要用于处理日期时间。

函数 说明
CURDATE(),CURRENT_DATE() 返回当前日期SELECT CURDATE()->2014-12-17
CURTIME(),CURRENT_TIME 返回当前时间SELECT CURTIME()->15:59:02
NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE(),LOCALTIMESTAMP() 返回当前日期和时间SELECT NOW()->2014-12-17 15:59:02
UNIX_TIMESTAMP() 以UNIX时间戳的形式返回当前时间SELECT UNIX_TIMESTAMP()->1418803177
UNIX_TIMESTAMP(d) 将时间d以UNIX时间戳的形式返回SELECT UNIX_TIMESTAMP('2011-11-11 11:11:11')->1320981071
FROM_UNIXTIME(d) 将UNIX时间戳的时间转换为普通格式的时间SELECT FROM_UNIXTIME(1320981071)->2011-11-11 11:11:11
UTC_DATE() 返回UTC日期SELECT UTC_DATE()->2014-12-17
UTC_TIME() 返回UTC时间SELECT UTC_TIME()->08:01:45 (慢了8小时)
MONTH(d) 返回日期d中的月份值,1->12SELECT MONTH('2011-11-11 11:11:11')->11
MONTHNAME(d) 返回日期当中的月份名称,如JanyarySELECT MONTHNAME('2011-11-11 11:11:11')->November
DAYNAME(d) 返回日期d是星期几,如Monday,TuesdaySELECT DAYNAME('2011-11-11 11:11:11')->Friday
DAYOFWEEK(d) 日期d今天是星期几,1星期日,2星期一SELECT DAYOFWEEK('2011-11-11 11:11:11')->6
WEEKDAY(d) 日期d今天是星期几, 0表示星期一,1表示星期二
WEEK(d),WEEKOFYEAR(d) 计算日期d是本年的第几个星期,范围是0->53SELECT WEEK('2011-11-11 11:11:11')->45
DAYOFYEAR(d) 计算日期d是本年的第几天SELECT DAYOFYEAR('2011-11-11 11:11:11')->315
DAYOFMONTH(d) 计算日期d是本月的第几天SELECT DAYOFMONTH('2011-11-11 11:11:11')->11
QUARTER(d) 返回日期d是第几季节,返回1->4SELECT QUARTER('2011-11-11 11:11:11')->4
HOUR(t) 返回t中的小时值SELECT HOUR('1:2:3')->1
MINUTE(t) 返回t中的分钟值SELECT MINUTE('1:2:3')->2
SECOND(t) 返回t中的秒钟值SELECT SECOND('1:2:3')->3
EXTRACT(type FROM d) 从日期d中获取指定的值,type指定返回的值SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11') ->11type可取值为:MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECONDDAY_SECONDDAY_MINUTEDAY_HOURYEAR_MONTH
TIME_TO_SEC(t) 将时间t转换为秒SELECT TIME_TO_SEC('1:12:00')->4320
SEC_TO_TIME(s) 将以秒为单位的时间s转换为时分秒的格式SELECT SEC_TO_TIME(4320)->01:12:00
TO_DAYS(d) 计算日期d距离0000年1月1日的天数SELECT TO_DAYS('0001-01-01 01:01:01')->366
FROM_DAYS(n) 计算从0000年1月1日开始n天后的日期SELECT FROM_DAYS(1111)->0003-01-16
DATEDIFF(d1,d2) 计算日期d1->d2之间相隔的天数SELECT DATEDIFF('2001-01-01','2001-02-02')->-32
ADDDATE(d,n) 计算其实日期d加上n天的日期
ADDDATE(d,INTERVAL expr type) 计算起始日期d加上一个时间段后的日期SELECT ADDDATE('2011-11-11 11:11:11',1)->2011-11-12 11:11:11 (默认是天)SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE)->2011-11-11 11:16:11 (TYPE的取值与上面那个列出来的函数类似)
DATE_ADD(d,INTERVAL expr type) 同上
SUBDATE(d,n) 日期d减去n天后的日期SELECT SUBDATE('2011-11-11 11:11:11', 1)->2011-11-10 11:11:11 (默认是天)
SUBDATE(d,INTERVAL expr type) 日期d减去一个时间段后的日期SELECT SUBDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE)->2011-11-11 11:06:11 (TYPE的取值与上面那个列出来的函数类似)
ADDTIME(t,n) 时间t加上n秒的时间SELECT ADDTIME('2011-11-11 11:11:11', 5)->2011-11-11 11:11:16 (秒)
SUBTIME(t,n) 时间t减去n秒的时间SELECT SUBTIME('2011-11-11 11:11:11', 5)->2011-11-11 11:11:06 (秒)
DATE_FORMAT(d,f) 按表达式f的要求显示日期dSELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')->2011-11-11 11:11:11 AM
TIME_FORMAT(t,f) 按表达式f的要求显示时间tSELECT TIME_FORMAT('11:11:11','%r')11:11:11 AM
GET_FORMAT(type,s) 获得国家地区时间格式函数select get_format(date,'usa')->%m.%d.%Y (注意返回的就是这个奇怪的字符串(format字符串))

4.条件判断函数

(1)IF(expr,v1,v2)函数

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

(2)IFNULL(v1,v2)函数

如果v1的值不为NULL,则返回v1,否则返回v2。

5.系统信息函数

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

函数 作用
VERSION() 返回数据库的版本号SELECT VERSION()->5.0.67-community-nt
CONNECTION_ID() 返回服务器的连接数
DATABASE()、SCHEMA 返回当前数据库名
USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()、CURRENT_USER 返回当前用户
CHARSET(str) 返回字符串str的字符集
COLLATION(str) 返回字符串str的字符排列方式
LAST_INSERT_ID() 返回最近生成的AUTO_INCREMENT值

6.加密函数

加密函数是MySQL用来对数据进行加密的函数。

(1)PASSWORD(str)

该函数可以对字符串str进行加密,一般情况下,PASSWORD(str)用于给用户的密码加密。

(2)MD5

MD5(str)函数可以对字符串str进行散列,可以用于一些普通的不需要解密的数据加密。

3)ENCODE(str,pswd_str)与DECODE(crypt_str,pswd_str)

ENCODE函数可以使用加密密码pswd_str来加密字符串str,加密结果是二进制数,需要使用BLOB类型的字段保存。该函数与DECODE是一对,需要同样的密码才能够解密。

查询(工具)

使用navicat,选择一个数据库,找到查询

右键,新建一个查询,点击查询创建工具。

首先在左侧列表中,双击选择所需要用到的表。

可以通过选择字段,选择表,选择添加条件,添加group by等等。如此就能在查询编辑器里

生成一条sql语句。

子沐课堂——Mysq从入门到精通(二)相关推荐

  1. 子沐课堂——Mysq从入门到精通(三)

    自定义函数(私人订制) 自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL. 所以UD ...

  2. 子沐课堂——分析一波Python就业前景

    前言 数据我们爬取得到了,参考文章:<子沐课堂--Scrapy之智联招聘篇(一)>,并且我们已经合理的保存到了Mysql数据库中了,参考文章:<子沐课堂--Scrapy之Mysql数 ...

  3. Kali Linux 从入门到精通(二)-安装

    Kali Linux 从入门到精通(二)-安装 Kail Linux 安装 持久加密USB安装-1 LUSK:Linux Unified Key Setup 磁盘分区加密规范 不依赖与操作系统的磁盘级 ...

  4. Mybatis从入门到精通二(入门详解)

    Mybatis从入门到精通二(想学Mybatis,看了这一篇你就不需要其他的了) 本课程分为两天第一天的请参考: https://blog.csdn.net/weixin_43564627/artic ...

  5. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  6. java从入门到精通二十三(Servlet)

    java从入门到精通二十三(Servlet) Servlet 说明 Servlet初步入门尝试 Servlet生命周期 Servlet方法说明和体系结构 方法说明 体系结构说明 一些优化封装 urlP ...

  7. lightroom 闪退_子意老师Lightroom从入门到精通系统课程

    Lightroom入门到精通提升图片处理的速度摄影师必备修图效率工具 9月我们又将迎来开学季,正是学习听课的好日子~新的学年,大家好呀!近期看到很多影友留言说,能不能开设Lightroom这款修图软件 ...

  8. MyBatis从入门到精通(二):MyBatis XML方式的基本用法之Select

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 明确需求 书中提到的需求是一个基 ...

  9. Tensorflow系列 | Tensorflow从入门到精通(二):附代码实战

    作者 | AI小昕 编辑 | 安可 [导读]:本文讲了Tensorflow从入门到精通.欢迎大家点击上方蓝字关注我们的公众号:深度学习与计算机视觉. Tensor介绍 Tensor(张量)是Tenso ...

最新文章

  1. 【POCO】POCO学习总结(四)——MinGW编译poco
  2. 电子学会 软件编程(图形化)一级训练营
  3. session 对象的简单实例
  4. 数据库执行计划慢导致I/O 慢
  5. Codeforces 976F
  6. MFC中单选按钮的特点总结
  7. 小学生手写Python程序解魔方!这是高手,这绝对是高手!
  8. php 强制输出数组,php怎么将对象强制转数组
  9. 1227:Ride to Office
  10. “聆听”升级,阿里云智能喜迎首席聆听官
  11. 关于发布WP 8.1应用信息不匹配问题的解决办法
  12. socketserver 模块的构成
  13. 虚拟机镜像xp\win7\win10\win8\win2003,免安装系统,下载即用
  14. MP3参数,格式,术语有关一切内容详解
  15. 阿里云RDS金融数据库(三节点版) - 案例篇
  16. rfc4309规范原文和机翻——aead ccm
  17. iOS 显示SVG文件的方法
  18. Kaggle:Quora Question Pairs
  19. 前端工程师的摸鱼日常(11)
  20. 华为手机如何调时间显示_华为手机照相有时间日期显示怎样设置

热门文章

  1. Devops学习实践(三) jenkins集成findbugs
  2. 红外测温仪的精度是怎么计算的
  3. 在程序中添加背景音乐!...
  4. Shopee虾皮上哪些产品容易盈利?分享2个shopee选品的方法和技巧
  5. ceRNA!你是谁?为了谁?
  6. 测试用例设计方法-等价类划分
  7. python 输入一个列表
  8. 回收站被清空如何找回
  9. [凯圣王]增肌减脂能同时/如何评判健身效果/什么是重量+容量单元
  10. 关于python中的open()函数