我的MYSQL学习心得(六) 函数
这一节主要介绍MYSQL里的函数,MYSQL里的函数很多,我这里主要介绍MYSQL里有而SQLSERVER没有的函数
数学函数
1、求余函数MOD(X,Y)
MOD(X,Y)返回x被y除后的余数,MOD()对于带有小数部分的数值也起作用,他返回除法运算后的精确余数
SELECT MOD(31,8)
2、四舍五入函数TRUNCATE(X,Y)
TRUNCATE(X,Y)返回被舍去至小数点后y位的数字x。若y的值为0,则结果不带有小数点或不带有小数部分。
若y设为负数,则截去(归零)x小数点左边起第y位开始后面所有低位的值。
SELECT TRUNCATE(1.32,1)
TRUNCATE(1.32,1)保留小数点后一位数字,返回值为1.3
TIPS:ROUND(X,Y)函数在截取值的时候会四舍五入,而TRUNCATE(x,y)直接截取值,并不进行四舍五入
3、求余函数HEX(X)和UNHEX(X)函数
有以下的代码可以演示HEX和UNHEX的功能:
SELECT HEX('this is a test str')
查询的结果为:746869732069732061207465737420737472
SELECT UNHEX('746869732069732061207465737420737472')
查询的结果为:this is a test str
字符串函数
计算字符串字符数的函数
0、LENGTH(STR)返回值为字符串的字符个数(sqlserver使用len()函数)
LENGTH函数在读取char类型数据时会删除字符右边的空格,而varchar不会
CREATE TABLE testchar(id INT ,NAME CHAR(20))
CREATE TABLE testvarchar(id INT ,NAME VARCHAR(20))
INSERT INTO testchar (id ,NAME)VALUES(1,'ss ')
INSERT INTO testchar (id ,NAME)VALUES(2,' ee ')
INSERT INTO testvarchar (id ,NAME)VALUES(1,'ss ')
INSERT INTO testvarchar (id ,NAME)VALUES(2,' ee ')
DELIMITER $$
SELECT * ,LENGTH(NAME) c FROM testchar $$
SELECT * ,LENGTH(NAME) varc FROM testvarchar $$
END $$
DELIMITER ;
1、CHAR_LENGTH(STR)返回值为字符串str所包含的字符个数。一个多字节字符算作一个单字符
SELECT CHAR_LENGTH('DATE')
2、合并字符串函数CONCAT_WS(x,s1,s2,......)
CONCAT_WS(x,s1,s2,......),CONCAT_WS代表CONCAT with Separator,是CONCAT()函数的特殊形式。
第一个参数x是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是
其他参数。如果分隔符为NULL,则结果为NULL。函数会忽略任何分隔符参数后的NULL值。
SELECT CONCAT_WS('-','1st','2nd','3rd'),CONCAT_WS('-','1st',NULL,'3rd')
CONCAT_WS('-','1st','2nd','3rd')使用分隔符‘-’将3个字符串连接成一个字符串,结果为“1st-2nd-3rd”;
CONCAT_WS('-','1st',NULL,'3rd')因为第二个值为NULL,所以第二个值不会出现在结果里
3、替换字符串的函数INSERT(S1,X,LEN,S2)
INSERT(S1,X,LEN,S2)函数跟SQLSERVER里的STUFF()函数的功能是一样的,这里不作介绍了
4、填充字符串的函数LPAD(S1,LEN,S2)和RPAD(S1,LEN,S2)
LPAD(S1,LEN,S2)返回字符串s1,其左边由字符串s2填补到len字符串长度。假如s1的长度大于len,则返回值被缩短至len字符。
LPAD()函数和RPAD()函数功能跟SQLSERVER里的 REPLACE()相似,不过功能更加强大
SELECT LPAD('hello',4,'??'),LPAD('hello',10,'??')
字符串“hello”长度大于4,不需要填充,因此LPAD('hello',4,'??')只返回被缩短的长度为4的子串
字符串“hello”长度小于10,LPAD('hello',10,'??')返回结果为“?????hello”,左侧填充“?”,长度为10
5、RPAD(S1,LEN,S2)返回字符串s1,其右边被字符串s2填补至len字符长度。假如字符串s1的长度大于len,则返回值被缩短到len字符长度
SELECT RPAD('hello',4,'?')
字符串“hello”长度大于4,不需要填充,因此RPAD('hello',4,'?')只返回被缩短的长度为4的子串"hell"
6、删除空格的函数TRIM(S)
TRIM(S)删除字符串s两侧的空格
MYSQL这里比SQLSERVER方便,SQLSERVER要删除两边的空格,需要使用: SELECT LTRIM(RTRIM(' hello '))
SELECT TRIM(' book ')
删除指定字符串的函数TRIM(S1 FROM S)
7、TRIM(S1 FROM S)删除字符串s中两端所有的子字符串s1。s1为可选项,在未指定情况下,删除空格
SELECT TRIM('xy' FROM 'xyxboxyokxxyxy')
'xyxboxyokxxyxy'两端的重复字符串“xy”,而中间的“xy”并不删除,结果为
xboxyokx
8、重复生成字符串的函数REPEAT(S,N)
这个函数跟SQLSERVER里的REPLICATE()函数是一样的,参数个数都是一样的,这里不作介绍了
9、比较字符串大小的函数STRCMP(S1,S2)
STRCMP(S1,S2)若所有的字符串均相同,则返回0;若根据当前分类次序,第一个参数小于第二个,则返回-1,其他情况返回1
SELECT STRCMP('txt','txt2') ,STRCMP('txt2','txt'),STRCMP('txt','txt')
“txt”小于“txt2”,因此 STRCMP('txt','txt2') 返回结果为-1
STRCMP('txt2','txt')返回结果为1
“txt”与“txt”相等,因此STRCMP('txt','txt')返回结果为0
10、匹配子串开始位置的函数
LOCATE(STR1,STR)、POSITION(STR1 IN STR)、INSTR(STR,STR1)3个函数作用相同,返回子字符串str1在字符串str中的开始位置
这三个函数跟SQLSERVER里的CHARINDEX()函数功能类似
SELECT LOCATE('ball','football'),POSITION('ball' IN 'football') ,INSTR('football','ball')
子字符串“ball”在字符串“football”中从第5个字母位置开始,因此3个函数返回结果都为5
11、返回指定位置的字符串的函数
ELT(N,字符串1,字符串2,字符串3,...,),若N=1,则返回值为字符串1,若N=2,则返回值为字符串2,以此类推。
若N小于1或大于参数的数目,则返回值为NULL
SELECT ELT(3,'1st','2nd','3rd'),ELT(3,'net','os')
由结果可以看到,ELT(3,'1st','2nd','3rd')返回第3个位置的字符串“3rd”;指定返回字符串位置超出参数个数,返回NULL
12、返回指定字符串位置的函数FIELD(S,S1,S2,...)
FIELD(S,S1,S2,...)返回字符串s在列表s1,s2,......中第一次出现的位置,在找不到s的情况下,返回值为0。
如果s为NULL,则返回值为0,原因是NULL不能同任何值进行同等比较。
SELECT FIELD('hi','hihi','hey','hi','bas') AS coll,
FIELD('hi','hihi','lo','hilo','foo') AS col2
FIELD('hi','hihi','hey','hi','bas')函数中字符串hi出现在列表的第3个字符串位置,因此返回结果为3
FIELD('hi','hihi','lo','hilo','foo') 列表中没有字符串hi,因此返回结果为0
13、返回子串位置的函数FIND_IN_SET(S1,S2)
FIND_IN_SET(S1,S2)返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个逗号
‘,’分开的字符串组成的列表。如果s1不在s2或s2为空字符串,则返回值为0。如果任意一个参数为NULL,则返回值为NULL。
这个函数在第一个参数包含一个逗号‘,’时将无法正常运行。
SELECT FIND_IN_SET('hi','hihi,hey,hi,bas')
虽然FIND_IN_SET(S1,S2)和FIELD(S,S1,S2,...)两个函数格式不同,但作用类似,都可以返回指定字符串在字符串列表中的位置
14、选取字符串的函数MAKE_SET(X,S1,S2,...)
MAKE_SET(X,S1,S2,...)返回由x的二进制数指定的相应位的字符串组成的字符串,s1对应比特1,s2对应比特01以此类推。
s1,s2...中的NULL值不会被添加到结果中。
SELECT MAKE_SET(1,'a','b','c') AS col1,
MAKE_SET(1|4,'hello','nice','world') AS col2
1的二进制值为0001,4的二进制值为0100,1与4进行异或操作之后的二进制值为0101,从右到左第一位和第三位为1。
MAKE_SET(1,'a','b','c')返回第一个字符串
MAKE_SET(1|4,'hello','nice','world') 返回从左端开始第一和第三个字符串组成的字符串
日期和时间函数
1、获取当前日期的函数和获取当前时间的函数
CURDATE()、CURRENT_DATE()、CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE()
以上函数都是返回当前日期和时间值,MYSQL的函数数量的确比SQLSERVER多很多,SQLSERVER获取当前时间和日期用的
函数是: SELECT GETDATE()
SELECT NOW()
返回UTC日期的函数和返回UTC时间的函数
MYSQL里返回UTC日期和时间是分开的,而SQLSERVER里是一起的
SELECT GETUTCDATE()
MYSQL
SELECT UTC_DATE(),UTC_TIME()
2、获取月份的函数MONTHNAME(DATE)
MONTHNAME(DATE)函数返回日期date对应月份的英文全名
SELECT MONTHNAME('2013-8-2')
返回8月份的英文
3、获取季度、分钟和秒钟的函数
QUARTER(DATE)返回date对应的一年中的季度值,范围是从1~4
使用QUARTER(DATE)函数返回指定日期对应的季度
SELECT QUARTER('11-04-01')
4月份在第二季度,所以返回2
4、MINUTE(TIME)返回time对应的分钟数,范围是从0~59
SELECT MINUTE('11-02-03 10:10:06')
返回10分钟
5、SECOND(time) 返回time对应的秒数,范围是从0~59
SELECT SECOND('10:23:10')
返回10秒
6、获取日期的指定值的函数EXTRACT(type FROM date)
EXTRACT(type FROM date)这个函数跟SQLSERVER里的DATEPART()函数是一样的
获取日期中的年份
SQLSERVER
DATEPART
SELECT DATEPART(YEAR,'2013-2-3')
MYSQL
EXTRACT()和DAYNAME()
SELECT DAYNAME('2009-3-2')
或
SELECT EXTRACT(YEAR FROM '2013-2-3')
7、时间和秒钟转换的函数
TIME_TO_SEC(time)返回已转化为秒的time参数,转换公式为:小时*3600+分钟*60+秒
SELECT TIME_TO_SEC('23:22:00')
SEC_TO_TIME(second)函数可以将秒转换为小时、分钟和秒数的second参数值
SELECT SEC_TO_TIME('84120')
SEC_TO_TIME(second)函数和TIME_TO_SEC(time)函数互为反函数
8、计算日期和时间的函数
MYSQL里计算日期和时间的函数比较多
增加日期:DATE_ADD(date,interval expr type),ADDDATE(date,interval expr type)
减去日期:DATE_SUB(date,interval expr type),SUBDATE(date,interval expr type)
增加时间:ADD_TIME(date,expr)
减去时间:SUBTIME(date,expr)
时间差:DATEDIFF()
最后一天:LAST_DAY(datetime)
日期和时间格式化:
DATE_FORMAT(date,format)
TIME_FORMAT(time,format)
返回日期时间字符串的显示格式:GET_FORMAT(val_type,format_type)
相对来说,SQLSERVER在时间日期方面的计算就没有那么多函数了
基本上SQLSERVER利用下面两个函数来通杀日期时间计算的场景
SELECT DATEADD(),DATEDIFF()
条件判断函数
条件判断函数也称为流程控制函数,根据满足的条件的不同,执行相应的流程。
MYSQL中进行条件判断的函数有IF、IFNULL、CASE
虽然SQLSERVER里也有IF和CASE,不过MYSQL里的IF语句的语法跟SQLERVER有很大出入
1、IF(expr,v1,v2)函数
IF(expr,v1,v2)如果表达式expr是TRUE(expr<>0 and expr<>NULL),则IF()的返回值为v1;
否则返回值为v2。IF()的返回值为数字值或字符串值,具体情况视其所在语境而定
SELECT IF(1>2,2,3)
1>2的结果为FALSE,IF(1>2,2,3)返回第二个表达式的值3。
TIPS:如果v1或v2中只有一个明确是NULL,则IF()函数的结果类型为非NULL表达式的结果类型。
2、IFNULL(V1,V2)函数
IFNULL(V1,V2)假如v1不为NULL,则IFNULL(V1,V2)的返回值为v1;否则其返回值为v2。
IFNULL()的返回值是数字或是字符串,具体情况视语境而定
SELECT IFNULL(1,2),IFNULL(NULL,10)
IFNULL(1,2)虽然第二个值也不为空,但返回结果依然是第一个值;
IFNULL(NULL,10)第一个值为空,因此返回“10”
注意:IFNULL(V1,V2)函数跟SQLSERVER里的 SELECT NULLIF() 函数不一样
SQLSERVER里的NULLIF函数
需要两个参数,如果两个指定的表达式等价,则返回null
例子:NULLIF(a,b)
说明:如果a和b是相等的,那么返回NULL,如果不相等返回a
select NULLIF('eqeqweqwe','1') 结果是eqeqweqwe
select NULLIF(1,1) 结果是NULL
a和b的类型要一致
3、CASE函数
注意:一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。
如果用字符串语境中,则返回结果为字符串。如果用在数字语境中,则返回结果为十进制、实数值或整数值
这个数据类型在拼接SQL语句的时候特别容易忽略,有时候会在拼接SQL语句的时候,case 后面的表达式或者when后面的表达式不一致报错!
参考文章:http://support.microsoft.com/kb/969467/zh-cn
修补程序: 错误消息,当您运行查询时,SQL Server 2008年中使用 CASE 函数:"转换失败时转换为数据类型 < Type2 > < Type1 > 值 < 值 >"
在MSDN论坛也有一个相关的帖子,大概是因为拼接sql的时候case 后面的表达式值的数据类型和else后面的表达式值的数据类型不一致导致拼接sql失败
具体的帖子地址忘记了,也找不到,如果找到以后会补充上
系统信息函数
1、获取MYSQL版本号、连接数和数据库名的函数
VERSION()返回指示MYSQL服务器版本的字符串。这个字符串使用utf8字符集
SELECT VERSION()
2、CONNECTION_ID()返回MYSQL服务器当前连接的次数,每个连接都有各自唯一的ID
查看当前用户的连接数
SELECT CONNECTION_ID()
这里返回1,返回值根据登录的次数会有不同。
3、SHOW PROCESSLIST;
4、SHOW FULL PROCESSLIST;
processlist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态
帮助识别出有问题的查询语句等。
如果是root帐号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。showprocesslist只能列出当前100条
如果想全部列出,可以使用SHOW FULL PROCESSLIST命令
SHOW PROCESSLIST
SHOW FULL PROCESSLIST
show full processlist会看到连接使用的内存
show processlist
show full processlist
各个列的含义
(1)id列,用户登录mysql时,系统分配的“connection_id”
(2)user列,显示当前用户。如果不是root,这个命令就只显示用户权限范围的sql语句
(3)host列,显示这个语句是从哪个ip的哪个端口上发的,可以用来跟踪出现问题语句的用户
(4)db列,显示这个进程目前连接的是哪个数据库
(5)command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect)
(6)time列,显示这个状态持续的时间,单位是秒
(7)state列,显示使用当前连接的sql语句的状态,很重要的列,后续会有所有状态的描述,state只是语句执行中的某一个状态。一个sql语句,
以查询为例
可能需要经过
copying to tmp table,
sorting result,
sending data
等状态才可以完成
(8)info列,显示这个sql语句,是判断问题语句的一个重要依据。
5、DATABASE()和SCHEMA()函数返回使用utf8字符集的默认(当前)数据库名
SELECT DATABASE(),SCHEMA()
可以看到,两个函数的作用相同
6、获取用户名的函数
USER()、CURRENT_USER()、CURRENT_USER、SYSTEM_USER()、SESSION_USER()
这几个函数返回当前被MYSQL服务器验证的用户名和主机名组合。这个值符合确定当前登录用户
存取权限的MYSQL帐户。一般情况下,这几个函数的返回值是相同的。
SELECT USER(),CURRENT_USER(),SYSTEM_USER()
返回结果指示了当前帐户连接服务器的用户名以及所连接的客户主机,root为当前登录的用户名,localhost为登录的主机名
7、获取字符串的字符集和排序方式的函数
CHARSET(STR)返回字符串str自变量的字符集
SELECT CHARSET('abc') ,CHARSET(CONVERT('abc' USING latin1)),CHARSET(VERSION())
CHARSET('abc')返回系统默认的字符集utf8;
CHARSET(CONVERT('abc' USING latin1))返回的字符集为latin1;
VERSION()返回的字符串使用utf8字符集,因此CHARSET返回结果为utf8
8、COLLATION(str)返回字符串str的字符排列方式
SELECT COLLATION(_latin2 'abc'),COLLATION(CONVERT('abc' USING utf8))
可以看到,使用不同字符集时字符串的排列方式不同
9、获取最后一个自动生成的ID值的函数
LAST_INSERT_ID()自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值
(1)一次插入一条记录
首先创建表worker,其ID字段带有AUTO_INCREMENT约束
CREATE TABLE worker(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
NAME VARCHAR(30)
)
分别单独向表worker插入2条记录
INSERT INTO worker VALUES(NULL,'jimmy');
INSERT INTO worker VALUES(NULL,'tom')
SELECT * FROM worker
查看已经插入的数据可以发现,最后一条插入的记录的ID字段值为2,使用LAST_INSERT_ID()查看最后自动生成的ID值
SELECT LAST_INSERT_ID()
可以看到,一次插入一条记录时,返回值为最后一条插入记录的ID值
(2)一次同时插入多条记录
接下来,向表中插入多条记录
INSERT INTO worker VALUES(NULL,'kevin'),(NULL,'michal'),(NULL,'nick')
查询已经插入的记录
SELECT * FROM worker
可以看到最后一条记录的ID字段值为5,使用LAST_INSERT_ID()查看最后自动生成的ID值
SELECT LAST_INSERT_ID()
结果显示,ID字段值不是5而是3,这是为什麽呢?
在向数据表插入一条记录时,LAST_INSERT_ID()返回带有AUTO_INCREMENT约束的字段最新生成的值2;继续向表
中同时添加3条记录,这时候因为当使用一条INSERT语句插入多个行时,LAST_INSERT_ID只返回插入的第一行数据
时产生的值,在这里为第3条记录。之所以这样,是因为这使依靠其他服务器复制同样的INSERT语句变得简单
TIPS:LAST_INSERT_ID是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的ID值
这里跟SQLSERVER不一样
使用下面脚本来测试,无论使用方式一还是方式二,当前的LAST_INSERT_ID都是最后一个值
CREATE TABLE [dbo].[aaa](
[a] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[name] [nvarchar](50) NOT NULL
) ON [PRIMARY]
USE [sss]
SELECT * FROM [dbo].[aaa]
INSERT INTO [dbo].[aaa]
( [name] )
VALUES ( N'sdfsdf' -- name - nvarchar(50)
)
SELECT * FROM [dbo].[aaa]
INSERT INTO [dbo].[aaa]
( [name] )
VALUES ( N'sdf969' -- name - nvarchar(50)
),('lkjj96'),('565656')
SELECT IDENT_CURRENT('aaa')
SELECT * FROM [dbo].[aaa]
加密函数
1、加密函数PASSWORD(STR)
PASSWORD(STR)从原文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL
SELECT PASSWORD('NEWPWD')
MYSQL将PASSWORD函数加密后的密码保存到用户权限表中
TIPS:PASSWOR()函数在MYSQL服务器的鉴定系统中使用;不应将他用在个人应用程序中,PASSWORD()函数加密是单向的(不可逆)
PASSWORD执行密码加密与UNIX中密码加密方式不同
2、加密函数MD5(str)
MD5(str)为字符串算出一个MD5 128比特校验和。该值以32位十六进制数字的二进制字符串形式返回,若参数为NULL,则会返回NULL
SELECT MD5('123')
3、加密函数ENCODE(str,pswd_str)
ENCODE(str,pswd_str)使用pswd_str作为密码,加密str。使用DECODE()解密结果,结果是一个和str长度相同的二进制字符串
SELECT ENCODE('nihao','123')
可以看到加密后的结果为乱码
4、解密函数DECODE(crypt_str,pswd_str)
DECODE(crypt_str,pswd_str)使用pswd_str作为密码,解密加密字符串crypt_str,crypt_str是由ENCODE()返回的字符串
SELECT DECODE(ENCODE('nihao','123'),'123')
可以看到,解密出来的字符串
ENCODE()和DECODE互为反函数
其他函数
1、格式化函数FORMAT(x,n)
FORMAT(x,n)将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串的形式返回。
若n为0,则返回结果函数不含小数部分
SELECT FORMAT(12332.123465,4)
FORMAT(12332.123465,4)保留4位小数点值,并进行四舍五入,结果为12,332.1235
2、不同进制的数字转换的函数
CONV(N,from_base,to_base)函数进行不同进制数间的转换。
SELECT CONV('a',16,2)
CONV('a',16,2)将十六进制的a转换为二进制表示的数值。
3、IP地址与数字相互转换的函数
INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。
地址可以是4或8比特地址
INET_NTOA(expr)给定一个数字网络地址(4或8比特),返回作为字符串的该地址的点地址表示。
4、加锁函数和解锁函数
GET_LOCK(str,timeout)设法使用字符串str给定的名字得到一个锁,超时为timeout秒。
RELEASE_LOCK(str)解开被GET_LOCK()获取的,用字符串str所命名的锁。
IS_FREE_LOCK(str)检查名为str的锁是否可以使用
IS_USED_LOCK(str)检查名为str的锁是否正在被使用
5、重复执行指定操作的函数
BENCHMARK(count,expr)函数重复count次执行表达式expr。他可以用于计算MYSQL处理表达式的速度。
结果值通常为0(0只是表示处理过程很快,并不是没有花费时间)
另一个作用是他可以在MYSQL客户端内部报告语句执行的时间。
首先,使用PASSWORD函数加密密码
SELECT PASSWORD('nihao')
可以看到PASSWORD()函数执行花费的时间为0.00098秒
下面使用BENCHMARK函数重复执行PASSWORD操作500000次
SELECT BENCHMARK(500000,PASSWORD('nihao'))
由此可以看出,使用BENCHMARK执行500000次的时间为0.49690秒,明显比执行一次的时间延长了。
TIPS:BENCHMARK报告的时间是客户端经过的时间,而不是在服务器端的CPU时间,每次执行后报告的时间并不一定是相同的。
6、改变字符集的函数
CONVERT(...using...)带有USING的CONVERT()函数被用来在不同的字符集之间转化数据。
SELECT CHARSET('string'),CHARSET(CONVERT('string' USING latin1))
默认为utf8字符集,通过CONVERT()将字符串“string”的默认字符集改为latin1
7、改变数据类型的函数
CAST:属于SQL2003标准,并且在mysql,sqlserver,oracle都已经被实现
CAST(x,AS type)和CONVERT(x,type)函数将一个类型的值转换为另一个类型的值,可转换的type有:
BINARY、CHAR(n)、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED
在SQLSERVER里也是使用这两个函数进行数据类型转换的~
SELECT CAST(100 AS CHAR(2)),CONVERT('2013-8-9 12:12:12',TIME)
可以看到, CAST(100 AS CHAR(2))将整数数据100转换为带有2个显示宽度的字符串类型,结果为10
CONVERT('2013-8-9 12:12:12',TIME)将DATETIME类型的值,转换为TIME类型值,结果为“12:12:12”
总结
这一节简单介绍了MYSQL里的一些函数,并且比较了与SQLSERVER的区别
TIPS:
1、MYSQL中,日期时间以字符串形式存储在数据表中,因此可以使用字符串函数分别截取日期时间值的不同部分
2、修改默认的字符集,更改MYSQL默认的字符集,在Windows中,只需要修改my.ini,该文件在MYSQL安装目录下。
修改配置文件中的default-character-set和character-set-server参数值,将其改为想要的字符集名称,如:
gbk、gb2312、latin1等,修改完之后,重启MYSQL服务,即可生效。
如果不确定当前使用的字符集,可以使用下面的SQL语句来查看当前字符集进行对比
SHOW VARIABLES LIKE 'character_set_%'
如有不对的地方,欢迎大家拍砖o(∩_∩)o
本文版权归作者所有,未经作者同意不得转载。
2014-7-17函数补充
http://baike.baidu.com/link?url=uwjXFFHv_ZzkloAoUMdSCTJd7xTCZwRw41w885eqwyskXUuH5jmQQPKaLZGE_IoSOmXJqZXbcKnXjB1FtKEt7K
控制流程函数View Code
编辑
[1] a) CASE WHEN THEN 函数
语法: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 ;
函数用法说明:在第一个方案中, 当满足条件value =compare-value 时,返回对应的result,否则返回ELSE后的result。
在第二个方案中,当满足条件condition时,返回对应的result,否则返回ELSE后的result。
两种方案中,如果都不满足而且如果没有ELSE 部分,则返回值为NULL
b) IF 函数用法
语法: IF(expr1,expr2,expr3)
函数用法说明:如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL) ,则 IF() 的返回值为 expr2 ; 否则返回值则为 expr3 。 IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定
c) IFNULL 函数
语法: IFNULL(expr1,expr2)
函数用法说明:假如 expr1 不为 NULL ,则 IFNULL() 的返回值为 expr1 ; 否则其返回值为 expr2 。 IFNULL() 的返回值是数字或是字符串,具体情况取决于其所使用的语境
2字符串函数
编辑
a) 函数 ascii(str)
函数用法说明:返回值为字符串 str 的最左字符的数值。假如 str 为空字符串,则返回值为 0 。假如 str 为 NULL ,则返回值为 NULL 。 ASCII() 用于带有从 0 到 255 的数值的字符
b) 函数 BIN(N)
函数用法说明:返回值为 N 的二进制值的字符串表示,其中 N 为一个 longlong (BIGINT) 数字。这等同于 CONV(N ,10,2) 。假如 N 为 NULL ,则返回值为 NULL 。
c) 函数CHAR(N ,... [USING charset ])
函数用法说明: CHAR() 将每个参数 N 理解为一个整数,其返回值为一个包含这些整数的代码值所给出的字符的字符串。 NULL 值被省略。
d) 函数CHAR_LENGTH(str )
函数使用说明:返回值为字符串 str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。对于一个 包含五个二字节字符集 , LENGTH() 返回值为 10, 而 CHAR_LENGTH() 的返回值为 5
e) 函数 CHARACTER_LENGTH(str )
函数使用说明: CHARACTER_LENGTH() 是 CHAR_LENGTH() 的同义词。
f) 函数 COMPRESS(string_to_compress )
函数使用说明: COMPRESS( 压缩一个字符串。这个函数要求 MySQL 已经用一个
诸如 zlib 的压缩库压缩过。 否则,返回值始终是 NULL 。 UNCOMPRESS() 可将压缩过的字符串进行解压缩 ) 。
g) 函数 CONCAT(str1 ,str2 ,...)
函数使用说明:返回结果为连接参数产生的字符串。如有任何一个参数为 NULL ,则
返回值为 NULL 。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)
h) 函数 CONCAT_WS(separator ,str1 ,str2 ,...)
函数使用说明: CONCAT_WS() 代表 CONCAT With Separator ,是 CONCAT() 的
特殊形式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL ,则结果为 NULL 。函数会忽略任何分隔符参数后的 NULL 值。
i) 函数CONV(N from_base, to_base)
函数使用说明:不同数基间转换数字。返回值为数字的 N 字符串表示,由 from_base 基转化为 to_base 基。如有任意一个参数为 NULL ,则返回值为 NULL 。自变量 N 被理解为一个整数,但是可以被指定为一个整数或字符串。最小基数为 2 ,而最大基数则为 36 。 If to_base 是一个负数,则 N 被看作一个带符号数。否则, N 被看作无符号数。 CONV() 的运行精确度为 64 比特。
j) 函数 ELT(N ,str1 ,str2 ,str3 ,...)
函数使用说明:若 N = 1 ,则返回值为 str1 ,若 N = 2 ,则返回值为 str2 ,以此
类推。 若 N 小于 1 或大于参数的数目,则返回值为 NULL 。 ELT() 是 FIELD() 的补数
k) 函数 EXPORT_SET(bits ,on ,off [,separator [,number_of_bits ]])
函数使用说明: 返回值为一个字符串,其中对于 bits 值中的每个位组,可以得到
一个 on 字符串,而对于每个清零比特位,可以得到一个 off 字符串。 bits 中的比特值按照从右到左的顺序接受检验 ( 由低位比特到高位比特 ) 。字符串被分隔字符串分开 ( 默认为逗号 ‘,’) ,按照从左到右的顺序被添加到结果中。 number_of_bits 会给出被检验的二进制位数 ( 默认为 64) 。
l) 函数 FIELD(str, str1, str2, str3, …...)
函数使用说明:返回值为 str1 , str2 , str3 ,…… 列表中的 str 指数。在找不到 str 的情况下,返回值为 0 。如果所有对于 FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数按照双倍进行比较。如果 str 为 NULL ,则返回值为 0 ,原因是 NULL 不能同任何值进行同等比较。 FIELD() 是 ELT() 的补数。
m) 函数FIND_IN_SET(str, strlist)
函数使用说明: 假如字符串 str 在由 N 子链组成的字符串列表 strlist 中, 则返
回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被 ‘,’ 符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是 type SET 列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果 str 不在 strlist 或 strlist 为空字符串,则返回值为 0 。如任意一个参数为 NULL ,则返回值为 NULL 。 这个函数在第一个参数包含一个逗号 (‘,’) 时将无法正常运行。
n) 函数 FORMAT(X ,D )
函数使用说明: 将 number X 设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后 D 位 , 而返回结果为一个字符串。
o) 函数 HEX(N_or_S )
函数使用说明:如果N_OR_S 是一个数字,则返回一个 十六进制值 N 的 字符串表示,在这里, N 是一个longlong (BIGINT) 数。这相当于 CONV(N,10,16) 。如果N_OR_S 是一个字符串,则返回值为一个N_OR_S 的十六进制字符串表示,其中每个N_OR_S 里的每个字符被转化为两个十六进制数字。
p) 函数INSTR(str,substr)
函数使用说明:返回字符串 str 中子字符串的第一个出现位置。这和LOCATE() 的双参数形式相同,除非参数的顺序被颠倒。
q) 函数LCASE(str)
函数使用说明:LCASE() 是 LOWER() 的同义词
r) 函数LEFT(str,len)
函数使用说明:返回从字符串str 开始的len 最左字符
s) 函数 LENGTH(str )
函数使用说明: 返回值为字符串 str 的长度,单位为字节。一个多字节字符算作多字节。这意味着 对于一个包含 5 个 2 字节字符的字符串, LENGTH() 的返回值为 10, 而 CHAR_LENGTH() 的返回值则为5 。
t) 函数 LOAD_FILE(file_name)
函数使用说明:读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上 , 你必须为文件制定路径全名,而且你还必须拥有 FILE 特许权。文件必须可读取,文件容量必须小于 max_allowed_packet 字节。若文件不存在,或因不满足上述条件而不能被读取, 则函数返回值为 NULL
u) 函数 LOCATE(substr ,str ) , LOCATE(substr ,str ,pos )
函数使用说明:第一个语法返回字符串 str 中子字符串substr 的第一个出现位置。第二个语法返回字符串 str 中子字符串substr 的第一个出现位置, 起始位置在pos 。如若substr 不在str 中,则返回值为0 。
v) 函数LOWER(str )
函数使用说明:返回字符串 str 以及所有根据最新的字符集映射表变为小写字母的字符
w) 函数LPAD(str ,len ,padstr )
函数使用说明:返回字符串 str , 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len , 则返回值被缩短至 len 字符。
x) 函数LTRIM(str )
函数使用说明:返回字符串 str ,其引导空格字符被删除。
y) 函数 MAKE_SET(bits ,str1 ,str2 ,...)
函数使用说明: 返回一个设定值 ( 一个包含被 ‘,’ 号分开的字字符串的字符串 ) ,由在 bits 组中具有相应的比特的字符串组成。 str1 对应比特 0, str2 对应比特 1, 以此类推。 str1 , str2 , ... 中的 NULL 值不会被添加到结果中。
z) 函数 MID(str ,pos ,len )
函数使用说明: MID(str ,pos ,len ) 是 SUBSTRING(str ,pos ,len ) 的同义词。
aa) 函数 OCT(N )
函数使用说明:返回一个 N 的八进制值的字符串表示,其中 N 是一个 longlong (BIGINT) 数。这等同于 CONV(N,10,8) 。若 N 为 NULL ,则返回值为 NULL 。
bb) 函数 OCTET_LENGTH(str )
函数使用说明: OCTET_LENGTH() 是 LENGTH() 的同义词。
cc) 函数ORD(str )
函数使用说明:若字符串str 的最左字符是一个多字节字符,则返回该字符的代码, 代码的计算通过使用以下公式计算其组成字节的数值而得出:
(1st byte code)
+ (2nd byte code × 256)
+ (3rd byte code × 2562
) ...
假如最左字符不是一个多字节字符,那么 ORD() 和函数ASCII() 返回相同的值
dd) 函数 POSITION(substr IN str )
函数使用说明:POSITION(substr IN str ) 是 LOCATE(substr ,str ) 同义词
ee) 函数QUOTE(str )
函数使用说明:引证一个字符串,由此产生一个在SQL 语句中可用作完全转义数据值的结果。 返回的字符串由单引号标注,每例都带有单引号 (‘'’) 、 反斜线符号 (‘\’) 、 ASCII NUL 以及前面有反斜线符号的Control-Z 。如果自变量的值为NULL, 则返回不带单引号的单词 “NULL” 。
ff) 函数REPEAT(str ,count )
函数使用说明:返回一个由重复的字符串str 组成的字符串,字符串str 的数目等于count 。 若 count <= 0, 则返回一个空字符串。若str 或 count 为 NULL ,则返回 NULL 。
gg) 函数REPLACE(str ,from_str ,to_str )
函数使用说明:返回字符串str 以及所有被字符串to_str 替代的字符串from_str 。
hh) 函数REVERSE(str )
函数使用说明:返回字符串 str ,顺序和字符顺序相反。
ii) 函数RIGHT(str ,len )
函数使用说明:从字符串str 开始,返回最右len 字符。
jj) 函数RPAD(str ,len ,padstr )
函数使用说明:返回字符串str , 其右边被字符串 padstr 填补至len 字符长度。假如字符串str 的长度大于 len , 则返回值被缩短到与 len 字符相同长度
kk) 函数RTRIM(str )
函数使用说明:返回字符串 str ,结尾空格字符被删去。
ll) 函数 SOUNDEX(str )
函数使用说明:从str 返回一个soundex 字符串。 两个具有几乎同样探测的字符串应该具有同样的 soundex 字符串。一个标准的soundex 字符串的长度为4 个字符,然而SOUNDEX() 函数会返回一个人以长度的字符串。 可使用结果中的SUBSTRING() 来得到一个标准 soundex 字符串。在str 中, 会忽略所有未按照字母顺序排列的字符。所有不在A-Z 范围之内的国际字母符号被视为元音字母。
mm) 函数expr1 SOUNDS LIKE expr2
函数使用说明: 这相当于SOUNDEX(expr1 ) = SOUNDEX(expr2 ) 。
nn) 函数SPACE(N )
函数使用说明:返回一个由N 间隔符号组成的字符串
oo) 函数SUBSTRING(str ,pos ) , SUBSTRING(str FROM pos ) SUBSTRING(str ,pos ,len ) , SUBSTRING(str FROM pos FOR len )
函数使用说明:不带有len 参数的格式从字符串str 返回一个子字符串,起始于位置 pos 。带有len 参数的格式从字符串str 返回一个长度同len 字符相同的子字符串,起始于位置 pos 。 使用 FROM 的格式为标准 SQL 语法。也可能对pos 使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。
pp) 函数SUBSTRING_INDEX(str ,delim ,count )
函数使用说明:在定界符 delim 以及count 出现前,从字符串str 返回自字符串。若count 为正值, 则返回最终定界符( 从左边开始) 左边的一切内容。若count 为负值,则返回定界符(从右边开始)右边的一切内容。
qq) 函数 TRIM([{BOTH | LEADING | TRAILING} [remstr ] FROM] str ) TRIM(remstr FROM] str )
函数使用说明:返回字符串 str , 其中所有remstr 前缀和/ 或后缀都已被删除。若分类符BOTH 、LEADIN 或TRAILING 中没有一个是给定的, 则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格
rr) 函数UCASE(str)
函数使用说明:UCASE() 是UPPER() 的同义词
ss) 函数UNCOMPRESS(string_to_uncompress )
函数使用说明:对经COMPRESS() 函数压缩后的字符串进行解压缩。若参数为压缩值,则结果为 NULL 。这个函数要求 MySQL 已被诸如zlib 之类的压缩库编译过。否则, 返回值将始终是 NULL
tt) 函数 UNCOMPRESSED_LENGTH(compressed_string )
函数使用说明: 返回压缩字符串压缩前的长度。
uu) 函数 UNHEX(str)
函数使用说明:执行从 HEX(str ) 的反向操作。就是说,它将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。结果字符以二进制字符串的形式返回
vv) 函数 UPPER(str )
函数使用说明:返回字符串 str , 以及根据最新字符集映射转化为大写字母的字符
3数学函数
编辑
a) 函数 ABS(X)
函数使用说明:返回 X 的绝对值
b) 函数 ACOS(X )
函数使用说明:返回 X 反余弦 , 即 , 余弦是 X 的值。若 X 不在 -1 到 1 的范围之内,则返回 NULL 。
c) 函数 ASIN ( X )
函数使用说明:返回X 的反正弦,即,正弦为X 的值。若X 若X 不在-1 到 1 的范围之内,则返回 NULL 。
d) 函数ATAN(X )
函数使用说明:返回 X 的反正切,即,正切为 X 的值。
e) 函数 ATAN(Y ,X ) , ATAN2(Y ,X )
函数使用说明:返回两个变量 X 及 Y 的反正切。 它类似于 Y 或 X 的反正切计
算 , 除非两个参数的符号均用于确定结果所在象限。
f) 函数 CEILING(X ) CEIL(X )
函数使用说明:返回不小于 X 的最小整数值。
g) 函数 COS(X )
函数使用说明:返回 X 的余弦,其中 X 在弧度上已知。
h) 函数 COT(X )
函数使用说明:返回 X 的余切
i) 函数 CRC32(expr )
函数使用说明:计算循环冗余码校验值并返回一个 32 比特无符号值。若参数为 NULL ,则结果为 NULL 。该参数应为一个字符串,而且在不是字符串的情况下会被作为字符串处理(若有可能)
j) 函数 DEGREES(X )
函数使用说明:返回参数 X , 该参数由弧度被转化为度。
k) 函数 EXP(X )
函数使用说明:返回 e 的 X 乘方后的值 ( 自然对数的底 ) 。
l) 函数 FLOOR(X )
函数使用说明:返回不大于 X 的最大整数值 。
m) 函数 FORMAT(X ,D )
函数使用说明:将数字 X 的格式写成 '#,###,###.##' 格式 , 即保留小数点后 D 位,而第 D 位的保留方式为四舍五入,然后将结果以字符串的形式返回
n) 函数 LN(X )
函数使用说明:返回 X 的自然对数 , 即 , X 相对于基数 e 的对数
o) 函数 LOG(X ) LOG(B ,X )
函数使用说明:若用一个参数调用,这个函数就会返回 X 的自然对数。
p) 函数 LOG2(X )
函数使用说明:返回 X 的基数为 2 的对数。
q) 函数 LOG10(X )
函数使用说明:返回 X 的基数为 10 的对数。
r) 函数 MOD(N ,M ) , N % M N MOD M
函数使用说明: 模操作。返回 N 被 M 除后的余数。
s) 函数 PI()
函数使用说明:返回 ϖ (pi) 的值。默认的显示小数位数是 7 位 , 然而 MySQL 内部会使用完全双精度值。
t) 函数 POW(X ,Y ) , POWER(X ,Y )
函数使用说明:返回 X 的 Y 乘方的结果值。
u) 函数 RADIANS(X )
函数使用说明:返回由度转化为弧度的参数 X , ( 注意 ϖ 弧度等于 180 度)。
v) 函数 RAND() RAND(N )
函数使用说明:返回一个随机浮点值 v ,范围在 0 到 1 之间 ( 即 , 其范围为 0 ≤ v ≤ 1.0) 。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。
w) 函数 ROUND(X ) ROUND(X ,D )
函数使用说明:返回参数 X , 其值接近于最近似的整数。在有两个参数的情况下,返回 X ,其值保留到小数点后 D 位,而第 D 位的保留方式为四舍五入。若要接保留 X 值小数点左边的 D 位,可将 D 设为负值。
x) 函数 SIGN(X )
函数使用说明:返回参数作为 -1 、 0 或 1 的符号,该符号取决于 X 的值为负、零或正。
y) 函数 SIN(X )
函数使用说明:返回 X 正弦,其中 X 在弧度中被给定。
z) 函数 SQRT(X )
函数使用说明: 返回非负数 X 的二次方根。
aa) 函数TAN(X )
函数使用说明: 返回 X 的正切,其中 X 在弧度中被给定。
bb) 函数TRUNCATE(X ,D )
函数使用说明: 返回被舍去至小数点后 D 位的数字 X 。若 D 的值为 0, 则结果
不带有小数点或不带有小数部分。可以将 D 设为负数 , 若要截去 ( 归零 ) X 小数点左起第 D 位开始后面所有低位的值
4日期时间函数
编辑
a) 函数ADDDATE(date ,INTERVAL expr type ) ADDDATE(expr ,days )
函数使用说明: 当被第二个参数的 INTERVAL 格式激活后, ADDDATE() 就是 DATE_ADD() 的同义词。相关函数 SUBDATE() 则是 DATE_SUB() 的同义词。对于 INTERVAL 参数上的信息 ,请参见关于 DATE_ADD() 的论述。
b) 函数 ADDTIME(expr ,expr2 )
函数使用说明: ADDTIME() 将 expr2 添加至 expr 然后返回结果。 expr 是一个时间或时间日期表达式,而 expr2 是一个时间表达式。
c) 函数 CONVERT_TZ(dt ,from_tz ,to_tz )
函数使用说明: CONVERT_TZ() 将时间日期值 dt 从 from_tz 给出的时区转到 to_tz 给出的时区,然后返回结果值。关于可能指定的时区的详细论述,若自变量无效,则这个函数会返回 NULL
d) 函数 CURDATE()
函数使用说明:将当前日期按照 'YYYY-MM-DD' 或 YYYYMMDD 格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。
e) 函数 CURRENT_DATE CURRENT_DATE()
函数使用说明: CURRENT_DATE 和 CURRENT_DATE() 是的同义词 .
f) 函数 CURTIME()
函数使用说明: 将当前时间以 'HH:MM:SS' 或 HHMMSS 的格式返回, 具体格式根据函数用在字符串或是数字语境中而定。
g) 函数 CURRENT_TIME, CURRENT_TIME()
函数使用说明: CURRENT_TIME 和 CURRENT_TIME() 是 CURTIME() 的同义词。
h) 函数 CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()
函数使用说明: CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP() 是 NOW() 的同义词
i) 函数 DATE(expr )
函数使用说明: 提取日期或时间日期表达式expr 中的日期部分。
j) 函数 DATEDIFF(expr ,expr2 )
函数使用说明: DATEDIFF() 返回起始时间 expr 和结束时间 expr2 之间的天数。 Expr 和 expr2 为日期或 date-and-time表达式。计算中只用到这些值的日期部分。
k) 函数 DATE_ADD(date ,INTERVAL expr type ) DATE_SUB(date ,INTERVAL expr type )
函数使用说明:这些函数执行日期运算。 date 是一个 DATETIME 或 DATE 值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 Expr 是一个字符串 ; 对于负值的时间间隔,它可以以一个 ‘-’ 开头。 type 为关键词,它指示了表达式被解释的方式。
l) 函数 DATE_FORMAT(date ,format )
函数使用说明:根据 format 字符串安排 date 值的格式。
m) 函数 DAY(date )
函数使用说明: DAY() 和 DAYOFMONTH() 的意义相同
n) 函数 DAYNAME(date )
函数使用说明:返回 date 对应的工作日名称。
o) 函数 DAYOFMONTH(date )
函数使用说明:返回 date 对应的该月日期,范围是从 1 到 31
p) 函数 DAYOFWEEK(date )
函数使用说明:返回 date (1 = 周日 , 2 = 周一 , ..., 7 = 周六 ) 对应的工作日索引。这些索引值符合 ODBC 标准
q) 函数 DAYOFYEAR(date )
函数使用说明:返回date 对应的一年中的天数,范围是从 1 到366 。
r) 函数 EXTRACT(type FROM date )
函数使用说明: EXTRACT() 函数所使用的时间间隔类型说明符同 DATE_ADD() 或 DATE_SUB() 的相同 , 但它从日期中提取其部分,而不是执行日期运算。
s) 函数FROM_DAYS(N )
函数使用说明: 给定一个天数 N , 返回一个 DATE 值。
t) 函数 FROM_UNIXTIME(unix_timestamp ) FROM_UNIXTIME(unix_timestamp ,format )
函数使用说明:返回'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS 格式值的unix_timestamp 参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。 若format 已经给出,则结果的格式是根据format 字符串而定。 format 可以包含同DATE_FORMAT() 函数输入项列表中相同的说明符。
u) 函数 GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')
函数使用说明:返回一个格式字符串。这个函数在同 DATE_FORMAT() 及 STR_TO_DATE() 函数结合时很有用
v) 函数 HOUR(time )
函数使用说明:返回 time 对应的小时数。对于日时值的返回值范围是从 0 到 23
w) 函数 LAST_DAY(date )
函数使用说明:获取一个日期或日期时间值,返回该月最后一天对应的值。若参数无效,则返回 NULL 。
x) 函数 LOCALTIME, LOCALTIME()
函数使用说明: LOCALTIME 及 LOCALTIME() 和 NOW() 具有相同意义。
y) 函数 LOCALTIMESTAMP, LOCALTIMESTAMP()
函数使用说明: LOCALTIMESTAMP 和 LOCALTIMESTAMP() 和 NOW() 具有相同意义。
z) 函数 MAKEDATE(year ,dayofyear )
函数使用说明:给出年份值和一年中的天数值,返回一个日期。 dayofyear 必须大于 0 ,否则结果为 NULL 。
aa) 函数 MAKETIME(hour ,minute ,second )
函数使用说明: 返回由 hour 、 minute 和 second 参数计算得出的时间值
bb) 函数 CROSECOND(expr )
函数使用说明:从时间或日期时间表达式expr 返回微秒值,其数字范围从 0 到 999999 。
cc) 函数 MINUTE(time )
函数使用说明:返回 time 对应的分钟数 , 范围是从 0 到 59 。
dd) 函数 MONTH(date )
函数使用说明:返回 date 对应的月份,范围时从 1 到 12 。
ee) 函数 MONTHNAME(date )
函数使用说明: 返回 date 对应月份的全名
ff) 函数 NOW()
函数使用说明:返回当前日期和时间值,其格式为 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS , 具体格式取决于该函数是否用在字符串中或数字语境中。
gg) 函数 PERIOD_ADD(P ,N )
函数使用说明:添加 N 个月至周期 P ( 格式为 YYMM 或 YYYYMM) ,返回值的格式为 YYYYMM 。注意周期参数 P 不是 日期值。
hh) 函数 PERIOD_DIFF(P1 ,P2 )
函数使用说明:返回周期 P1 和 P2 之间的月份数。 P1 和 P2 的格式应该为 YYMM 或 YYYYMM 。注意周期参数 P1 和 P2 不是 日期值。
ii) 函数 QUARTER(date )
函数使用说明:返回 date 对应的一年中的季度值,范围是从 1 到 4
jj) 函数 SECOND(time )
函数使用说明:返回 time 对应的秒数 , 范围是从 0 到 59 。
kk) 函数 SEC_TO_TIME(seconds )
函数使用说明: 返回被转化为小时、 分钟和秒数的 seconds 参数值 , 其格式为 'HH:MM:SS' 或 HHMMSS ,具体格式根据该函数是否用在字符串或数字语境中而定
ll) 函数 STR_TO_DATE(str ,format )
函数使用说明:这是 DATE_FORMAT() 函数的倒转。它获取一个字符串 str 和一个格式字符串 format 。若格式字符串包含日期和时间部分,则 STR_TO_DATE() 返回一个 DATETIME 值, 若该字符串只包含日期部分或时间部分,则返回一个 DATE 或 TIME 值。
mm) 函数 SUBDATE(date ,INTERVAL expr type ) SUBDATE(expr ,days )
函数使用说明:当被第二个参数的 INTERVAL 型式调用时 , SUBDATE() 和 DATE_SUB() 的意义相同。对于有关 INTERVAL 参数的信息, 见有关 DATE_ADD() 的讨论。
nn) 函数 SUBTIME(expr ,expr2 )
函数使用说明: SUBTIME() 从 expr 中提取 expr2 ,然后返回结果。 expr 是一个时间或日期时间表达式,而 xpr2 是一个时间表达式。
oo) 函数 SYSDATE()
函数使用说明:返回当前日期和时间值,格式为 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS , 具体格式根据函数是否用在字符串或数字语境而定。
pp) 函数 TIME(expr )
函数使用说明:提取一个时间或日期时间表达式的时间部分,并将其以字符串形式返回。
qq) 函数 TIMEDIFF(expr ,expr2 )
函数使用说明: TIMEDIFF() 返回起始时间 expr 和结束时间 expr2 之间的时间。 expr 和 expr2 为时间或 date-and-time表达式, 两个的类型必须一样。
rr) 函数TIMESTAMP(expr ) , TIMESTAMP(expr ,expr2 )
函数使用说明: 对于一个单参数 , 该函数将日期或日期时间表达式expr 作为日期时间值返回 . 对于两个参数 , 它将时间表达式 expr2 添加到日期或日期时间表达式 expr 中,将 theresult 作为日期时间值返回。
ss) 函数 TIMESTAMPADD(interval ,int_expr ,datetime_expr )
函数使用说明:将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr 中。 int_expr 的单位被时间间隔参数给定,该参数必须是以下值的其中一个: FRAC_SECOND 、SECOND 、 MINUTE 、 HOUR 、 DAY 、 WEEK 、 MONTH 、 QUARTER 或 YEAR 。可使用所显示的关键词指定Interval 值,或使用SQL_TSI_ 前缀。例如, DAY 或SQL_TSI_DAY 都是正确的
tt) 函数 TIMESTAMPDIFF(interval ,datetime_expr1 ,datetime_expr2 )
函数使用说明:返回日期或日期时间表达式 datetime_expr1 和 datetime_expr2 the 之间的整数差。其结果的单位由 interval 参数给出。 interval 的法定值同 TIMESTAMPADD() 函数说明中所列出的相同。
uu) 函数 TIME_FORMAT(time ,format )
函数使用说明:其使用和 DATE_FORMAT() 函数相同 , 然而 format 字符串可能仅会包含处理小时、分钟和秒的格式说明符。其它说明符产生一个 NULL 值或 0 。
vv) 函数 TIME_TO_SEC(time )
函数使用说明:返回已转化为秒的 time 参数
ww) 函数 TO_DAYS(date )
函数使用说明:给定一个日期 date , 返回一个天数 ( 从年份 0 开始的天数 ) 。
xx) 函数 UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date )
函数使用说明:若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数 ) 作为无符号整数。若用 date 来调用 UNIX_TIMESTAMP() ,它会将参数值以 '1970-01-01 00:00:00' GMT 后的秒数的形式返回。 date 可以是一个 DATE 字符串、一个 DATETIME 字符串、一个 TIMESTAMP 或一个当地时间的 YYMMDD 或 YYYMMDD 格式的数字。
yy) 函数 UTC_DATE, UTC_DATE()
函数使用说明:返回当前 UTC 日期值,其格式为 'YYYY-MM-DD' 或 YYYYMMDD ,具体格式取决于函数是否用在字符串或数字语境中。
zz) 函数 UTC_TIME, UTC_TIME()
函数使用说明:返回当前 UTC 值,其格式为 'HH:MM:SS' 或 HHMMSS ,具体格式根据该函数是否用在字符串或数字语境而定。
aaa) 函数 UTC_TIMESTAMP, UTC_TIMESTAMP()
函数使用说明:返回当前 UTC 日期及时间值,格式为 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS ,具体格式根据该函数是否用在字符串或数字语境而定
bbb) 函数 WEEK(date [,mode ])
函数使用说明:该函数返回 date 对应的星期数。 WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从 0 到 53 或从 1 到 53 。若 mode 参数被省略,则使用 default_week_format 系统自变量的值。
ccc) 函数 WEEKDAY(date )
函数使用说明:返回 date (0 = 周一 , 1 = 周二 , ... 6 = 周日 ) 对应的工作日索引 weekday index for
ddd) 函数 WEEKOFYEAR(date )
函数使用说明:将该日期的阳历周以数字形式返回,范围是从 1 到 53 。它是一个兼容度函数,相当于 WEEK(date ,3) 。
eee) 函数 YEAR(date )
函数使用说明:返回 date 对应的年份 , 范围是从 1000 到 9999 。
fff) 函数 YEARWEEK(date ), YEARWEEK(date ,start )
函数使用说明:返回一个日期对应的年或周。 start 参数的工作同 start 参数对 WEEK() 的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。
5搜索函数
编辑
a) 函数 MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])
6加密函数
编辑
a) 函数 AES_ENCRYPT(str ,key_str ) , AES_DECRYPT(crypt_str ,key_str )
函数使用说明:这些函数允许使用官方 AES 进行加密和数据加密 ( 高级加密标准 ) 算法 , 即以前人们所熟知的 “Rijndael” 。 保密关键字的长度为 128 比特,不过你可以通过改变源而将其延长到 256 比特。我们选择了 128 比特的原因是它的速度要快得多,且对于大多数用途而言这个保密程度已经够用。
b) 函数DECODE(crypt_str ,pass_str )
函数使用说明:使用 pass_str 作为密码,解密加密字符串 crypt_str , crypt_str 应该是由 ENCODE() 返回的字符串。
c) 函数 ENCODE(str ,pass_str )
函数使用说明:使用 pass_str 作为密码,解密 str 。 使用 DECODE() 解密结果。
d) 函数 DES_DECRYPT(crypt_str [,key_str ])
函数使用说明:使用 DES_ENCRYPT() 加密一个字符串。若出现错误,这个函数会返回 NULL 。
e) 函数 DES_ENCRYPT(str [,(key_num |key_str )])
函数使用说明:用 Triple-DES 算法给出的关键字加密字符串。若出现错误,这个函数会返回 NULL 。
f) 函数 ENCRYPT(str [,salt ])
函数使用说明:使用 Unix crypt() 系统调用加密 str 。 salt 参数应为一个至少包含 2 个字符的字符串。若没有给出 salt 参数,则使用任意值。
g) 函数 MD5(str )
函数使用说明:为字符串算出一个 MD5 128 比特检查和。该值以 32 位十六进制数字的二进制字符串的形式返回 , 若参数为 NULL 则会返回 NULL 。例如,返回值可被用作散列关键字
h) 函数 OLD_PASSWORD(str )
函数使用说明:当 PASSWORD() 的执行变为改善安全性时, OLD_PASSWORD() 会被添加到 MySQL 。 OLD_PASSWORD() 返回从前的 PASSWORD() 执行值 ( 4.1 之前 ) ,同时允许你为任何 4.1 之前的需要连接到你的 5.1 版本 MySQL 服务器前客户端设置密码,从而不至于将它们切断
i) 函数PASSWORD(str )
函数使用说明:从原文密码str 计算并返回密码字符串,当参数为 NULL 时返回 NULL 。这个函数用于用户授权表的Password 列中的加密MySQL 密码存储
7信息函数
编辑
a) 函数 BENCHMARK(count ,expr )
函数使用说明: BENCHMARK() 函数重复 count 次执行表达式 expr 。 它可以被用于计算 MySQL 处理表达式的速度。结果值通常为 0 。另一种用处来自 mysql 客户端内部 , 能够报告问询执行的次数
b) 函数 CHARSET(str )
函数使用说明:返回字符串自变量的字符集。
c) 函数 COERCIBILITY(str )
函数使用说明:返回字符串自变量的整序可压缩性值。
d) 函数 COLLATION(str )
函数使用说明:返回惠字符串参数的排序方式。
e) 函数 CONNECTION_ID()
函数使用说明:返回对于连接的连接 ID ( 线程 ID) 。每个连接都有各自的唯一 ID 。
f) 函数 CURRENT_USER, CURRENT_USER()
函数使用说明:返回当前话路被验证的用户名和主机名组合。这个值符合确定你的存取权限的 MySQL 账户。在被指定 SQL SECURITY DEFINER 特征的存储程序内, CURRENT_USER() 返回程序的创建者
g) 函数 DATABASE()
函数使用说明:返回使用 utf8 字符集的默认 ( 当前 ) 数据库名。在存储程序里,默认数据库是同该程序向关联的数据库,但并不一定与调用语境的默认数据库相同。
h) 函数 FOUND_ROWS()
函数使用说明: A SELECT 语句可能包括一个 LIMIT 子句,用来限制服务器返回客户端的行数。在有些情况下,需要不用再次运行该语句而得知在没有 LIMIT 时到底该语句返回了多少行。为了知道这个行数 , 包括在 SELECT 语句中选择 SQL_CALC_FOUND_ROWS ,随后调用 FOUND_ROWS()
i) 函数 LAST_INSERT_ID() LAST_INSERT_ID(expr )
函数使用说明:自动返回最后一个 INSERT 或 UPDATE 问询为 AUTO_INCREMENT 列设置的第一个 发生的值。
j) 函数 ROW_COUNT()
函数使用说明: ROW_COUNT() 返回被前面语句升级的、插入的或删除的行数。 这个行数和 mysql 客户端显示的行数及 mysql_affected_rows() C API 函数返回的值相同。
k) 函数 SCHEMA()
函数使用说明:这个函数和 DATABASE() 具有相同的意义
l) 函数 SESSION_USER()
函数使用说明: SESSION_USER() 和 USER() 具有相同的意义。
m) 函数 SYSTEM_USER()
函数使用说明: SYSTEM_USER() 合 USER() 具有相同的意义
n) 函数 USER()
函数使用说明:返回当前 MySQL 用户名和机主名
o) 函数 VERSION()
函数使用说明:返回指示 MySQL 服务器版本的字符串。这个字符串使用 utf8 字符集。
8其他函数
编辑
a) 函数 DEFAULT(col_name )
函数使用说明:返回一个表列的默认值。若该列没有默认值则会产生错误。
b) 函数 FORMAT(X ,D )
函数使用说明:将数字 X 的格式写为 '#,###,###.##', 以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。
c) 函数 GET_LOCK(str ,timeout )
函数使用说明:设法使用字符串 str 给定的名字得到一个锁, 超时为 timeout 秒。若成功得到锁,则返回 1 ,若操作超时则返回 0 ( 例如 , 由于另一个客户端已提前*了这个名字 ), 若发生错误则返回 NULL ( 诸如缺乏记忆或线程 mysqladmin kill 被断开 ) 。假如你有一个用 GET_LOCK() 得到的锁,当你执行 RELEASE_LOCK() 或你的连接断开 ( 正常或非正常 ) 时,这个锁就会解除
d) 函数 INET_ATON(expr )
函数使用说明:给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是 4 或 8 比特地址。
e) 函数 INET_NTOA(expr )
函数使用说明:给定一个数字网络地址 (4 或 8 比特 ), 返回作为字符串的该地址的电地址表示
f) 函数 IS_FREE_LOCK(str )
函数使用说明:检查名为 str 的锁是否可以使用 ( 换言之 , 没有被* ) 。若锁可以使用,则返回 1 ( 没有人在用这个锁 ), 若这个锁正在被使用,则返回 0 ,出现错误则返回 NULL ( 诸如不正确的参数 ) 。
g) 函数 IS_USED_LOCK(str )
函数使用说明:检查名为 str 的锁是否正在被使用 ( 换言之 , 被* ) 。若被*,则返回使用该锁的客户端的连接标识符。否则返回 NULL 。
h) 函数 MASTER_POS_WAIT(log_name ,log_pos [,timeout ])
函数使用说明:该函数对于控制主从同步很有用处。它会持续*,直到从设备阅读和应用主机记录中所有补充资料到指定的位置。返回值是其为到达指定位置而必须等待的记录事件的数目。若从设备 SQL 线程没有被启动、从设备主机信息尚未初始化、参数不正确或出现任何错误,则该函数返回 NULL 。若超时时间被超过,则返回 -1 。若在 MASTER_POS_WAIT() 等待期间,从设备 SQL 线程中止,则该函数返回 NULL 。若从设备由指定位置通过,则函数会立即返回结果。
i) 函数 NAME_CONST(name ,value )
函数使用说明:返回给定值。 当用来产生一个结果集合列时 , NAME_CONST() 促使该列使用给定名称。
j) 函数 RELEASE_LOCK(str )
函数使用说明:解开被 GET_LOCK() 获取的,用字符串 str 所命名的锁。若锁被解开,则返回 1 ,若改线程尚未创建锁,则返回 0 ( 此时锁没有被解开 ), 若命名的锁不存在,则返回 NULL 。若该锁从未被对 GET_LOCK() 的调用获取,或锁已经被提前解开,则该锁不存在。
k) 函数 SLEEP(duration )
函数使用说明:睡眠 ( 暂停 ) 时间为 duration 参数给定的秒数,然后返回 0 。若 SLEEP() 被中断 , 它会返回 1 。 duration 或许或包括一个给定的以微秒为单位的分数部分。
l) 函数 UUID()
函数使用说明:返回一个通用唯一标识符 (UUID) , UUID 被设计成一个在时间和空间上都独一无二的数字。 2 个对 UUID() 的调用应产生 2 个不同的值,即使这些调用的执行是在两个互不相连的单独电脑上进行。
m) 函数 VALUES(col_name )
函数使用说明:在一个 INSERT … ON DUPLICATE KEY UPDATE … 语句中,你可以在 UPDATE 子句中使用 VALUES(col_name ) 函数,用来访问来自该语句的 INSERT 部分的列值。换言之, UPDATE 子句中的 VALUES(col_name ) 访问需要被插入的 col_name 的值 , 并不会发生重复键冲突。这个函数在多行插入中特别有用。 VALUES() 函数只在 INSERT ... UPDATE 语句中有意义,而在其它情况下只会返回 NULL
9聚合函数
编辑
a) 函数 AVG([DISTINCT] expr )
函数使用说明:返回 expr 的平均值。 DISTINCT 选项可用于返回 expr 的不同值的平均值。
b) 函数 BIT_AND(expr )
函数使用说明:返回expr 中所有比特的 bitwise AND 。计算执行的精确度为64 比特(BIGINT) 。若找不到匹配的行,则这个函数返回1844 ( 这是无符号 BIGINT 值,所有比特被设置为 1 )。
c) 函数 BIT_OR(expr )
函数使用说明:返回expr 中所有比特的bitwise OR 。计算执行的精确度为64 比特(BIGINT) 。若找不到匹配的行,则函数返回 0 。
d) 函数BIT_XOR(expr )
函数使用说明:返回expr 中所有比特的bitwise XOR 。计算执行的精确度为64 比特(BIGINT) 。若找不到匹配的行,则函数返回 0 。
e) 函数 COUNT(expr )
函数使用说明:返回SELECT 语句检索到的行中非NULL 值的数目。若找不到匹配的行,则COUNT() 返回 0
f) 函数 COUNT(DISTINCT expr ,[expr ...])
函数使用说明:返回不同的非NULL 值数目。若找不到匹配的项,则COUNT(DISTINCT) 返回 0
g) 函数 GROUP_CONCAT(expr )
函数使用说明:该函数返回带有来自一个组的连接的非NULL 值的字符串结果。其完整的语法如下所示:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr }
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val ])
h) 函数 MIN([DISTINCT] expr ), MAX([DISTINCT] expr )
函数使用说明:返回 expr 的最小值和最大值。 MIN() 和 MAX() 的取值可以是一个字符串参数;在这些情况下, 它们返回最小或最大字符串值。
i) 函数 STD(expr ) STDDEV(expr )
函数使用说明:返回 expr 的总体标准偏差。这是标准 SQL 的延伸。这个函数的 STDDEV() 形式用来提供和 Oracle 的兼容性。可使用标准 SQL 函数 STDDEV_POP() 进行代替
j) 函数 STDDEV_POP(expr )
函数使用说明:返回expr 的总体标准偏差(VAR_POP() 的平方根) 。你也可以使用 STD() 或STDDEV(), 它们具有相同的意义,然而不是标准的 SQL 。若找不到匹配的行,则STDDEV_POP() 返回 NULL
k) 函数 STDDEV_SAMP(expr )
函数使用说明:返回expr 的样本标准差 ( VAR_SAMP() 的平方根) 。若找不到匹配的行,则STDDEV_SAMP() 返回 NULL
l) 函数 SUM([DISTINCT] expr )
函数使用说明:返回expr 的总数。 若返回集合中无任何行,则 SUM() 返回NULL 。DISTINCT 关键词可用于 MySQL 5.1 中,求得expr 不同值的总和。 若找不到匹配的行,则SUM() 返回 NULL
m) 函数 VAR_POP(expr )
函数使用说明:返回 expr 总体标准方差。它将行视为总体,而不是一个样本, 所以它将行数作为分母。你也可以使用 VARIANCE(), 它具有相同的意义然而不是 标准的 SQL
n) 函数 VAR_SAMP(expr )
函数使用说明:返回expr 的样本方差。更确切的说,分母的数字是行数减去1 。若找不到匹配的行,则VAR_SAMP() 返回NULL
o) 函数VARIANCE(expr )
函数使用说明:返回expr 的总体标准方差。这是标准SQL 的延伸。可使用标准SQL 函数 VAR_POP() 进行代替。若找不到匹配的项,则VARIANCE() 返回NULL