从0到1学数据库:Function函数
点击上方“罗晓胜”,马上关注,您的支持对我帮助很大
上期文章
从0到1学数据库:数据库基础
从0到1学数据库:Select查询语句
/ 前言 /
为什么要有函数,不如问函数是什么,是干嘛的!函数是为了方便我们的各种操作而产生的,就是一个设计好的方程式,给出参数,它就给你对应的结果
/ 正文 /
要点
1.字符函数
2.数值函数
3.日期函数
4.转换函数
5.流程函数
6.系统函数
7.函数嵌套
单行函数
• 语法: 函数名[(参数1,参数2,…)]
• 其中的参数可以是以下之一:
– 变量
– 列名
– 表达式
• 单行函数还有以下的一些特征:
– 单行函数对单行操作
– 每行返回一个结果
– 有可能返回值与原参数数据类型不一致(转换函数)
– 单行函数可以写在SELECT、WHERE、ORDER BY子句中
– 有些函数没有参数,有些函数包括一个或多个参数
– 函数可以嵌套
字符函数
字符函数:主要指参数类型是字符型,不同函数返回值可能是 字符型或数字类型。
字符函数
大小写转换:
• LOWER(列名|表达式): 将字符转换成 小写 • UPPER(列名|表达式): 将字符转换成 大写字符处理:
• LENGTH:取字符长度 格式:LENGTH(column | expression)• CONCAT:连接两个值,等同于|| 格式:CONCAT(column1|expression1,column2|expression2)
• SUBSTR:截取,返回第一个参数中从n1字符开始长度为n2的子串,如果n1是负值,表示 从后向前数的abs(n1)位,如果n2省略,取n1之后的所有字符 格式:SUBSTR(column | expression,n1[,n2])
• INSTR:定位,返回s1中,子串s2从n1开始,第n2次出现的位置。n1,n2默认值为1 格式:INSTR(s1,s2,[,n1],[n2])
• TRIM:去除空格,也可去除字符串头部或尾部(头尾)的字符 格式:TRIM(leading | trailing | both trim_character From trim_source)
• LPAD:左填充,返回s1被s2从左面填充到n1长度。格式:LPAD(s1,n1,s2)
• RPAD:右填充,返回s1被s2从右面填充到n1长度。格式:RPAD(s1,n1,s2) • REPLACE:替换,把s1中的s2用s3替换。格式:REPLACE(s1,s2,s3)
字符大小写操作函数
• LOWER:示例:LOWER('SQL Course') 结果:sql course
• UPPER:示例:UPPER('SQL Course') 结果:SQL COURSE
字符处理函数
函数 | 结果 |
---|---|
LENGTH('String') | 6 |
CONCAT('Good', 'String') | GoodString |
SUBSTR('String',1,3) | Str |
INSTR('String', 'r') | 3 |
TRIM('S' FROM 'SSMITH') | MITH |
LPAD(sal,10,'*') | ******5000 |
RPAD(sal,10,'*') | 5000****** |
REPLACE('abc','b','d') | adc |
LEFT(str,len):返回字符串str的最左面len个字符。
select LEFT('foobarbar', 5);
RIGHT(str,len):返回字符串str的最右面len个字符。
select RIGHT('foobarbar', 4);
LOCATE(substr,str):返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
select LOCATE('bar', 'foobarbar'); select LOCATE('xbar', 'foobar');
LTRIM(str):返回删除了其前置空格字符的字符串str。
select LTRIM(' barbar');
RTRIM(str):返回删除了其拖后空格字符的字符串str。
select RTRIM(‘barbar ’);
REPEAT(str,count):返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果str或count是NULL,返回NULL。
select REPEAT('MySQL', 3);
REVERSE(str):返回颠倒字符顺序的字符串str。
select REVERSE('abc');
INSERT(str,pos,len,newstr):返回字符串str,在位置pos起始的子串且len个字符长的子串由字符串newstr代替。
select INSERT(‘whatareyou', 5, 3, ‘is');
查询示例:
SELECT id, CONCAT(name, age) NAME, LENGTH (name) length FROM student
数字函数
• ROUND(列名|表达式, n):四舍五入,将列或表达式所表示的数值四舍五 入到小数点后的第n位。
• CEIL(列名|表达式, n):向上取整
• Floor(列名|表达式, n):向下取整
• truncate(列名|表达式,n):截断,将列或表达式所表示的数值截取到小 数点后的第n位。
• MOD(m,n):取余,取m除以n后得到的余数。
示例:SELECT ROUND(65.654,2),CEIL(65.654),Floor(65.654),truncate(65.654,1),mod(65.654,2) ;
结果-- 65.65 66 65 65.6 1.654
日期函数
常用的日期运算如下:
• now():返回系统日期+时间
• sysdate():返回系统日期+时间,sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值;
• current_timestamp, current_timestamp():获得当前时间戳函数 • curdate():返回系统当前日期,不返回时间
• curtime():返回当前系统中的时间,不返回日期
MySQL 日期转换函数、时间转换函数
• str_to_date 将日期格式的字符转换成指定格式的日期
• date_format(date,format) 日期转换字符串
• time_format(time,format) 日期转换字符串
示例:
date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') -- 20080808222301
select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30
(日期、天数)转换函数
to_days(date):日期转换天数
time_to_sec(time):时间转换秒数
sec_to_time(seconds):秒数转换时间
示例
select to_days('2008-08-08'); -- 733627
select time_to_sec('01:00:05'); -- 3605
select sec_to_time(3605); -- '01:00:05'
拼凑日期、时间函数
makdedate(year,dayofyear):拼凑日期
maketime(hour,minute,second):拼凑时间
示例
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'
MySQL 日期时间计算函数
date_add():日期增加一个时间间隔 示例
set @dt = now(); select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year); select date_add(@dt, interval -1 day); -- sub 1 dayselect date_add(@dt, interval '01:15:30' hour_second);
结果:2008-08-09 13:28:03 select date_add(@dt, interval '1 01:15:30' day_second);
结果:2008-08-10 13:28:03
date_sub():为日期减去一个时间间隔
select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
结果:1997-12-30 22:58:59
datediff(date1,date2):两个日期相减 date1 - date2,返回天数。timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值:
select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7
select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
select timediff('08:08:08', '00:00:00'); -- 08:08:08
注意:timediff(time1,time2) 函数的两个参数类型必须相同。
时间戳(timestamp)转换、增、减函数
timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr)
timestampdiff(unit,datetime_expr1,datetime_expr2)
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01 select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00 MySQL timestampadd() 函数类似于 date_add()。
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12 select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7
转换函数
Cast(字段名 as 转换的类型 ),其中类型可以为:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和时间型
DECIMAL float型
SIGNED int
TIME 时间型
示例
cast(123 AS CHAR(3)) //整数转字符串
cast( '123 ' as SIGNED INTEGER) //字符串转整数
select cast(11 as unsigned int) /*整型*/
select cast(11 as decimal(10,2)) /*浮点型*/
控制流程函数
CASE value WHEN [compare-value]
THEN result [WHEN [compare-value] THEN result ...] [ELSE result]
END
CASE WHEN [condition]
THEN result [WHEN [condition] THEN result ...] [ELSE result]
END
示例:
SELECT CASE 11 WHEN 1
THEN 'one'
WHEN 2
THEN 'two' ELSE 'more' END;SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。
IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。示例:
SELECT IF(1>2,2,3);
SELECT IF(1<2,'yes ','no');
SELECT IF(STRCMP('test','test1'),'no','yes');
STRCMP(expr1,expr2) 如果字符串相同,STRCMP()返回0,如果第一参数根据当前的排序次序小于第二个,返回-1,否则返回1。
Strcmp(str1,str2):如果str1>str2返回1,str1=str2反回0,str1<str2返回-1)
示例:
select STRCMP('text', 'text2');
select STRCMP('text2', 'text');
select STRCMP('text', 'text');
系统信息函数
获取MySQL版本号、连接数、数据库名的函数
VERSION()函数返回数据库的版本号;
CONNECTION_ID()函数返回服务器的连接数,也就是到现在为止MySQL服务的连接次数;
DATABASE()和SCHEMA()返回当前数据库名。
USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()和CURRENT_USER这几个函数可以返回当前用户的名称。
CHARSET(str)函数返回字符串str的字符集,一般情况这个字符集就是系统的默认字符集;
COLLATION(str)函数返回字符串str的字符排列方式。
LAST_INSERT_ID()函数返回最后生成的AUTO_INCREMENT值。
其他函数
加密函数PASSWORD(str)
PASSWORD(str)函数可以对字符串str进行加密。一般情况下,PASSWORD(str)函数主要是用来给用户的密码加密的。下面使用PASSWORD(str)函数为字符串“abcd”加密。
加密函数MD5(str)
MD5(str)函数可以对字符串str进行加密。MD5(str)函数主要对普通的数据进行加密。下面使用MD5(str)函数为字符串“abcd”加密。
加密函数ENCODE(str,pswd_str)
ENCODE(str,pswd_str)函数可以使用字符串pswd_str来加密字符串str。加密的结果是一个二进制数,必须使用BLOB类型的字段来保存它。
解密函数
DECODE(crypt_str,pswd_str)函数可以使用字符串pswd_str来为crypt_str解密。crypt_str是通过ENCODE(str,pswd_str)加密后的二进制数据。字符串pswd_str应该与加密时的字符串pswd_str是相同的。下面使用DECODE(crypt_str,pswd_str)为ENCODE(str,pswd_str)加密的数据解密。
格式化函数FORMAT(x,n)
FORMAT(x,n)函数可以将数字x进行格式化,将x保留到小数点后n位。这个过程需要进行四舍五入。
ASCII(s)返回字符串s的第一个字符的ASCII码;
BIN(x)返回x的二进制编码;
HEX(x)返回x的十六进制编码;
OCT(x)返回x的八进制编码;
CONV(x,f1,f2)将x从f1进制数变成f2进制数。
IP地址与数字相互转换的函数
INET_ATON(IP)函数可以将IP地址转换为数字表示;
INET_ATON(IP)函数中IP值需要加上引号 INET_NTOA(n)函数可以将数字n转换成IP的形式。
加锁函数和解锁函数
GET_LOCT(name,time)函数定义一个名称为nam、持续时间长度为time秒的锁。如果锁定成功,返回1;如果尝试超时,返回0;如果遇到错误,返回NULL。
RELEASE_LOCK(name)函数解除名称为name的锁。如果解锁成功,返回1;如果尝试超时,返回0;如果解锁失败,返回NULL;IS_FREE_LOCK(name)函数判断是否使用名为name的锁。如果使用,返回0;否则,返回1。重复执行指定操作的函数 BENCHMARK(count,expr)函数将表达式expr重复执行count次,然后返回执行时间。该函数可以用来判断MySQL处理表达式的速度。
改变字符集的函数
CONVERT(s USING cs)函数将字符串s的字符集变成cs
注:CAST(x AS type)和CONVERT(x,type)这两个函数将x变成type类型。这两个函数只对BINARY、CHAR、DATE、DATETIME、TIME、SIGNED INTEGER、UNSIGNED INTEGER这些类型起作用。但两种方法只是改变了输出值的数据类型,并没有改变表中字段的类型。
函数嵌套
• 单行函数可以嵌套于任何层。
• 嵌套的函数是从最里层向最外层的顺序计算的。
/ 总结 /
本文主要讲了Function函数的各种类型和使用方式,常使用这些函数会方便我们的工作,毕竟有句话叫站在巨人的肩膀。
往期推荐:
如何入门做软件开发
为什么我不推荐入行程序员
做全栈开发很难吗
关注我的公众号,学习技术或投稿
长按上图,识别图中二维码即可关注
从0到1学数据库:Function函数相关推荐
- dz3.0数据库操作函数分析说明
开 发dz3.0插件的朋友都知道,在开发插件中,大部分插件都要涉及到数据库的操作,而官方提醒开发插件要尽量用官方提供的数据库操作函数,但是我在网上找 了很多资料,都没有看到数据库操作函数的一些具体说明 ...
- python bar函数循环_一木.溪桥学Python-08: for循环、function函数
一木.溪桥 在Logic Education跟Amy学Python 逻辑教育 :https://logicedu.ke.qq.com 12期:Python基础课 一木.溪桥学Python-08: fo ...
- TensorFlow2.0(八)--tf.function函数转换
tf.function函数转换 1. 关于tf.function 2. tf.function 的实现 3. 关于@tf.function 1. 关于tf.function tf.function的官 ...
- 不扯淡学数据库实践联系理论-课程
内容简介: 通过我多年在不同项目需求下使用不同数据库的实践给大家讲解一下数据库的实际使用情况.本课程从零开始讲解数据库,使用开源免费的mysql从安装到使用和开发进行实际操作和演示,甚至有些内容多年开 ...
- mysql function函数_详解MySQL如何按表创建千万级的压测数据
概述 有时我们要对系统做压测,或者数据库压力测试,这时候需要对某些表插入几百万或者上千万数据,下面介绍下怎么利用MySQL循环和存储过程对特定表的创建千万行数据. 1.准备测试表 CREATE TAB ...
- mysql数据库的函数_详解数据库_MySQL: mysql函数
一.内置函数 1.数学函数 rand() round(num) ceil(num) floor(num) 随机 四舍五入 向上取整 向下取整 2.字符串函数 length() 字节长度 char_le ...
- python必备基础代码-新手上路必学的Python函数基础知识,全在这里了(多段代码举例)...
原标题:新手上路必学的Python函数基础知识,全在这里了(多段代码举例) 导读:函数是Python中最重要.最基础的代码组织和代码复用方式.根据经验,如果你需要多次重复相同或类似的代码,就非常值得写 ...
- php 读取纯真书库,PHP读取纯真IP数据库的函数
PHP读取纯真IP数据库的函数,以下代码提取自Discuz! X2 $tinyipfile Discuz! 独有高压缩比算法和快速检索的IP数据库路径 下载地址:http://www.discuz.n ...
- MySQL函数(CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型)
MySQL函数 /* 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 区别: 存储过程: ...
最新文章
- 关于机器学习中的一些常用方法的补充
- java并发编程系列-内存模型基础
- Python 文件的详细操作
- nyoj66分数拆分
- 线程池 调度 java_java调度器和线程池总结
- 正则-Strip函数
- RTT时钟管理篇——软硬定时器理解(二)
- thinkpad T430s 在win8上安装ubuntu双系统(UEFI开启)
- oppoJava面试!java开发视频聊天
- 数据库设计经验谈[2]
- 中缀表达式转后缀表达式
- Webstorm2018破解
- iTween介绍和用法
- unity text颜色渐变
- CH582M,PWM模拟DAC实现WAV播放,FATFS文件
- SDN学习笔记(一)
- 关于char是否能表示一个中文
- 番茄工作法总结-第四章:中断
- OpenLayer学习之加载天地图在线地图
- 计算机开机右下角无显示桌面,电脑开机后不显示桌面的原因