mysql的常用函数

一. 使用字符串函数

1. 合并字符串函数CONCAT()和CONCAT_WS()
1.1 函数CONCAT()
CONCAT()函数会将传入的参数连接起来返回所合并的字符串类型数据。如果其中一个参数为NULL,则返回值为NULL。
SELECT CONCAT('My','S','QL') 合并后字符串;

SELECT CONCAT(CURDATE(),12.34) 合并后字符串;

SELECT CONCAT('My','S','QL',NULL) 合并后字符串;

1.2 函数CONCAT_WS()

CONCAT_WS(SEP,S1,S2,…SN)函数与CONCAT()相比,多了一个表示分割符的SEP参数,即不仅将传入的其他参数连接起来,而且还会通过分割符将各个字符串分割开。分隔符可以是一个字符串,也可以是其他参数。如果分隔符为NULL,则返回结果为NULL。函数会忽略任何分隔符参数后的NULL值。

SELECT CONCAT_WS('-','029',88461234) 合并后字符串

执行SQL函数CONCAT_WS(),当分割符参数的值为NULL时,具体SQL语句如下:

SELECT CONCAT_WS(NULL,'029',88461234) 合并后字符串;

执行结果显示,当所传入的第一个参数值为NULL,返回的结果值将为NULL,因此返回结果为NULL。

执行SQL函数CONCAT_WS(),当分割符参数后值存在NULL时,具体SQL语句如下:

SELECT CONCAT_WS('-','029',NULL,88461234) 合并后字符串;

执行结果显示,当所传入的参数(除第一个参数外)值中有NULL,返回的结果值将忽略NULL,因此返回结果为029-88461234。

2. 比较字符串大小函数STRCMP()

STRCMP(str1,str2)函数用来比较字符串参数str1和str2,如果参数str1大于str2,则返回结果1;如果参数str1小于str2,则返回结果-1;如果参数str1等于str2,则返回结果0。

SELECT STRCMP('abc','abd'),

    STRCMP('abc','abc'),

    STRCMP('abc','abb');

3. 获取字符串长度函数LENGTH()和字符数函数CHAR_LENGTH()

通过函数LENGTH()和CHAR_LENGTH()获取字符串的长度。LENGTH(str)函数会获取传人的参数str的长度,CHAR_LENGTH(str)函数会获取传人的参数str的字符串。

3.1 函数LENGTH()

SELECT 'MySQL' 英文字符串,LENGTH('MySQL') 字符串字符长度,'常建功' 中文字符串,LENGTH('常建功') 字符串字符长度

由于一个英文字符占一个字节,所以字符串'MySQL'的长度为5,由于一个汉字字符占3个字符(有的书说是2个),所以字符串'常建功'的长度为6。

3.2 函数CHAR_LENGTH()

SELECT 'MySQL' 英文字符串,CHAR_LENGTH('MySQL') 字符串字符长度,'常建功' 中文字符串,CHAR_LENGTH('常建功') 字符串字符长度

字符串'MySQL'共有5个字符,但是占有6个字节空间。这是因为每个字符串都会以\0结束,结束符\0也会占用一个字节空间。

4. 实现字母大小写转换函数UPPER()和字符数函数LOWER()
4.1 函数UPPER()和UCASE()函数会将字符串中的所有字母转换成大写字母。
SELECT 'mysql' 字符串,UPPER('mysql') 转换后字符串,UCASE('mysql') 转换后字符串;

4.2 函数LOWER()和LCASE()函数会将字符串中的所有字母转换成小写字母。

SELECT 'MYSQL' 字符串,LOWER('MYSQL') 转换后字符串,LCASE('MYSQL') 转换后字符串;

5. 查找字符串

5.1 返回字符串位置的函数FIND_IN_SET() 。

通过函数FIND_IN_SET(str1,str2)获取相匹配字符串的位置,该函数会返回在字符串str2中与str1相匹配的字符串的位置,参数str2字符串中将包含若干个用逗号隔开的字符串。

SELECT FIND_IN_SET('MySQL','orcle,sql server,MySQL') 位置;

5.2 返回指定字符串位置的函数FIELD()

通过函数FIELD(str,str1,str2…) 获取相匹配字符串的位置。该函数将会返回第一个与字符串str匹配的字符串的位置。

SELECT FIELD('MySQL','orcle','sql server','MySQL') 位置;

5.3 返回子字符串相匹配的开始位置

可以通过三个函数获取子字符串相匹配的开始位置,它们分别为函数LOCATE()、POSITION()和INSTR()。

LOCATE(str1,str) 函数将会返回参数str中字符串str1的开始位置。其他两个函数定义如下:POSITION(str1 IN str) INSTR(str,str1)。

SELECT LOCATE('SQL','MySQL') 位置,

POSITION('SQL' IN 'MySQL') 位置,

INSTR('MySQL','SQL') 位置;

5.4 返回指定位置的字符串的函数ELT()

通过函数ELT(n,str1,str2…)获取指定位置的字符串,该函数将会返回第n个字符串。

SELECT ELT(1,'MySQL','orcle','sql server') 第1个位置的字符串;

5.5 选择字符串的函数MAKE_SET()

可以通过函数MAKE_SET(num,str1,str2…strn)获取字符串,该函数首先会将数值num转换成二进制数,然后按照二进制数从参数str1,str2,……,strn中选取相应的字符串。在通过二进制数来选择字符串时,会从右到左的顺序读取该值,如果值为1值选择该字符串,否则将不选择该字符串。

SELECT BIN(5) 二进制数,MAKE_SET(5,'MySQL','Oracle','SQL Server','PostgreSQL') 选取后的字符串,

    BIN(7) 二进制数,MAKE_SET(7,'MySQL','Oracle','SQL Server','PostgreSQL') 选取后的字符串;

6. 从现有字符串中截取子字符串

在MySQL中提供了丰富的函数去实现截取子字符串功能,分别为函数LEFT()、函数RIGHT()、函数SUBSTRING()和函数MID()。

6.1 从左边或右边截取子字符串

LEFT(str,num):返回字符串str中的包含前num个字母(从左边数)的字符串。

RIGHT(str,num):返回字符串str中的包含后num个字母(从右边数)的字符串。

SELECT 'MySQL' 字符串,LEFT('MySQL',2) 前两个字符,RIGHT('MySQL',3) 后三个字符;

6.2 截取指定位置和长度子字符串

SUBSTRING(str,num,len):返回字符串str中的第num个位置开始长度为len的子字符串。

MID(str,num,len)

SELECT 'oraclemysql' 字符串,SUBSTRING('oraclemysql',7,5) 截取子字符串,MID('oraclemysql',7,5) 截取子字符串;

7. 去除字符串的首尾空格

在MySQL中提供了丰富函数去实现去除字符串空格功能,分别为函数LTRIM()、函数RTRIM()和函数TRIM()。LTRIM(str)去除字符串开始处空格,RTRIM(str)去除字符串结束处空格,TRIM(str)去除字符串首尾空格。

SELECT CONCAT('-','  MySQL','-') 原来字符串,CHAR_LENGTH(CONCAT('-','  MySQL','-')) 原来字符串长度,

CONCAT('-',LTRIM('  MySQL'),'-') 处理后字符串,CHAR_LENGTH(CONCAT('-',LTRIM('  MySQL'),'-')) 处理后字符串串长度

8. 替换字符串
8.1 使用INSERT()函数
INSERT(str,pos,len,newstr):该函数会将字符串str中的pos位置开始长度为len的字符串用字符串ewstr来替换。如果参数pos的值超过字符串长度,则返回值为原始字符串str。如果len的长度大于原来字符串(str)中所剩字符串的长度,则从位置pos开始进行全部替换。若任何一个参数为NULL,则返回值为NULL。
SELECT '这是MySQL数据库管理系统' 字符串,

    INSERT('这是MySQL数据库管理系统',3,5,'Oracle') 转换后字符串;

执行SQL函数INSERT(),当替换的起始位置大于字符串长度,具体SQL语句如下:

SELECT '这是MySQL数据库管理系统' 字符串, CHAR_LENGTH('这是MySQL数据库管理系统') 字符串字符数,

    INSERT('这是MySQL数据库管理系统',16,15,'Oracle') 转换后字符串;

执行SQL函数INSERT(),当所要替换的长度大于原来字符串中所剩字符串的长度,则从起始位置开始进行全部替换,具体SQL语句如下:

SELECT '这是MySQL数据库管理系统' 字符串,CHAR_LENGTH('MySQL数据库管理系统') 剩余字符数,

    INSERT('这是MySQL数据库管理系统',3,15,'Oracle') 转换后字符串;

8.2 使用REPLACE()函数

REPLACE(str,substr,newstr)):该函数会将字符串str中的子字符串substr用字符串newstr来替换。

SELECT '这是MySQL数据库管理系统' 原字符串,

    REPLACE('这是MySQL数据库管理系统','MySQL','Oracle') 替换后字符串;

二. 使用数值函数

1. 获取随机数
通过RAND()函数和RAND(x)函数获取随机数。这两个函数都会返回0~1间的随机数,其中RAND()函数返回的数是完全随机的,而RAND(x)函数返回的随机数值是相同的。
SELECT RAND(),RAND(),RAND(3),RAND(3);

2. 获取整数的函数
通过CEIL()(CEILING())函数和FLOOR()函数获取整数。
2.1 CEIL(x)函数:返回大于或等于数值x的最小整数。
SELECT CEIL(4.3),CEIL(-2.5),CEILING(4.5),CEILING(-2.5)

2.2 FLOOR(x):返回小于或等于数值x的最大整数。
SELECT FLOOR(4.3),FLOOR(-2.5);

3. 截取数值函数

有时候需要对数值的小数位数进行截取,通过函数TRUNCATE()函数实现截取操作。

TRUNCATE(x,y):返回数值x保留到小数点后y位的值。

SELECT TRUNCATE(903.53567,2),TRUNCATE(903.53567,-1);

4. 四舍五入函数

ROUND(x):返回数值x经过四舍五入操作后的数组。

ROUND(x,y):返回数值x保留到小数点后y位的值,在具体截取数值时需要进行四舍五入的操作。

SELECT ROUND(903.53567),ROUND(-903.53567),

    ROUND(903.53567,2),ROUND(903.53567,-1);

三. 使用日期和时间函数

1. 获取当前日期和时间的函数
1.1 获取当前日期和时间
可以通过四个函数获取当前的日期和时间,它们分别是NOW(),CURRENT_TIMESTAMP(),LOCALTIME()和SYSDATE()函数。
SELECT NOW() now方式,CURRENT_TIMESTAMP() timestamp方式,

    LOCALTIME() localtime方式,SYSDATE() systemdate方式;

1.2 获取当前日期

可以通过两个函数获取当前日期,它们分别是CURDATE()和CURRENT_DATE()函数。

SELECT CURDATE() CURDATE方式,CURRENT_DATE() CURRENT_DATE方式;

1.3 获取当前时间

可以通过两个函数获取当前日期,它们分别是CURTIME()和CURRENT_TIME()函数。

SELECT CURTIME() CURTIME方式,CURRENT_TIME() CURRENT_TIME方式;

2. 通过各种方式显示日期和时间
2.1 通过UNIX方式显示日期和时间
该方式将显示从1970年1月1日开始所经过的毫秒数。
SELECT NOW() 当前时间,

    UNIX_TIMESTAMP(NOW()) unix格式,

    FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) 普通格式;

SELECT NOW() 当前时间,

    UNIX_TIMESTAMP() unix格式,

    UNIX_TIMESTAMP(NOW()) unix格式;

2.2 通过UTC方式显示日期和时间
UTC为中文国际协调时间
SELECT NOW() 当前日期和时间,

    UTC_DATE() UTC日期,

    UTC_TIME() UTC时间;

3. 获取日期和时间各部分值

SELECT NOW() 当前日期和时间, 

    YEAR(NOW()) 年,

    QUARTER(NOW()) 季度,

    MONTH(NOW()) 月,

    WEEK(NOW())星期,

    DAYOFMONTH(NOW()) 天,

    HOUR(NOW()) 小时,

    MINUTE(NOW()) 分,

    SECOND(NOW()) 秒;

4. 计算日期和时间的函数

SELECT NOW() 当前日期和时间, 

    TO_DAYS(NOW()) 相隔天数,

    FROM_DAYS(TO_DAYS(NOW())) 一段时间后日期和时间,

    DATEDIFF(NOW(),'2000-12-01') 相隔天数;

一. 使用系统信息函数

1. 获取MySQL系统信息
SELECT  VERSION() 版本号,

    DATABASE() 数据库名,

    USER() 用户名;

2. 获取AUTO_INCREMENT约束的最后ID值
CREATE TABLE t_autoincrement (

    id INT(11) NOT NULL AUTO_INCREMENT UNIQUE

);



INSERT INTO t_autoincrement VALUES(NULL);

INSERT INTO t_autoincrement VALUES(NULL);

INSERT INTO t_autoincrement VALUES(NULL);

INSERT INTO t_autoincrement VALUES(NULL);



SELECT LAST_INSERT_ID();

3.  其他函数

流程函数:

IF(value,t f)

如果value是真,返回t,否则返回f

IFNULL(value1,value2)

如果value1不为空返回value1,否则返回value2

CASE WHEN [value1] THEN[result1]…ELSE[default]

END

如果value1是真,返回result1,否则返回default

CASE [expr]WHEN[value1] THEN[result1]…ELSE[default]

END

如果expr等于value1,返回result1,否则返回default

实现特殊功能的函数:

函      数

作                用

PASSWORD(str)

实现对字符串str进行加密

FORMAT(x,n)

实现将数字x进行格式化,保留n位小数

INET_ATON(ip)

实现将IP地址转换成数字

INET_NTOA(x)

实现将数字转换成IP

GET_LOCT(name,time)

创建一个持续时间为time的名为name的锁

RELEASE_LOCT(name)

为名为name的锁进行解锁

BENCHMARK(count,expr)

实现将表达式重复执行count次

CONVERT(s USING cs)

实现将字符串s的字符集变成cs

CONVERT(x,type)

实现将x变成type类型

                            

你可能感兴趣的:(mysql)