1. 使用字符串函数

1.1合并字符串函数CONCAT()和CONCAT_WS()

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

CONCAT_WS()函数全程为CONCAT With Separator,是CONCAT()函数的特殊形式。函数CONCAT_WS()的定义如下:
CONCAT_WS(SEP,S1,S2,…SN)
上述函数与CONCAT()相比,多了一个表示分割符的SEP参数,即不仅将传入的其他参数连接起来,而且还会通过分割符将各个字符串分割开。分隔符可以是一个字符串,也可以是其他参数。如果分隔符为NULL,则返回结果为NULL。函数会忽略任何分隔符参数后的NULL值。
(1)>SELECT CONCAT_WS('-','029',88461234) 合并后字符串

(2)执行SQL函数CONCAT_WS(),当分割符参数的值为NULL时,具体SQL语句如下:
>SELECT CONCAT_WS(NULL,'029',88461234) 合并后字符串;
执行结果显示,当所传入的第一个参数值为NULL,返回的结果值将为NULL,因此返回结果为NULL。

(3)执行SQL函数CONCAT_WS(),当分割符参数后值存在NULL时,具体SQL语句如下:
SELECT CONCAT_WS('-','029',NULL,88461234) 合并后字符串;
执行结果显示,当所传入的参数(除第一个参数外)值中有NULL,返回的结果值将忽略NULL,因此返回结果为029-88461234。

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

比较所传入的字符串对象。查看帮助文档,函数STRCMP()的定义如下:
STRCMP(str1,str2)
上述函数用来比较字符串参数str1和str2,如果参数str1大于str2,则返回结果1;如果参数str1小于str2,则返回结果-1;如果参数str1等于str2,则返回结果0。
>SELECT STRCMP('abc','abd'),
>SELECT    STRCMP('abc','abc'),
>SELECT STRCMP('abc','abb');

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

在MySQL软件中可以通过函数LENGTH()和CHAR_LENGTH()获取字符串的长度。
> select length('abc');
> select char_length('abc');

1.4实现字母大小写转换函数UPPER()和字符数函数LOWER()

关于实现字母大写转换函数除了UPPER()外,还可以通过函数UCASE()来实现,其具体定义如下:UCASE(S)
> select upper('abC');


1.5 查找字符串

(1).返回字符串位置的函数FIND_IN_SET()  

在MySQL软件中可以通过函数FIND_IN_SET()获取相匹配字符串的位置。
> SELECT FIND_IN_SET('MySQL','orcle,sql server,MySQL') 位置;


(2).返回指定字符串位置的函数FIELD()
在MySQL软件中可以通过函数FIELD()获取相匹配字符串的位置。查看帮助文档,函数FIELD()的定义如下:
FIELD(str,str1,str2…)  上述函数将会返回第一个与字符串str匹配的字符串的位置。
>SELECT FIELD('MySQL','orcle','sql server','MySQL') 位置;


(3).返回子字符串相匹配的开始位置
在MySQL软件中可以通过三个函数获取子字符串相匹配的开始位置,它们分别为函数LOCATE()、POSITION()和INSTR()。查看帮助文档,函数LOCATE()的定义如下:
LOCATE(str1,str) 上述函数将会返回参数str中字符串str1的开始位置。
其他两个函数定义如下:POSITION(str1 IN str) INSTR(str,str1)
SELECT LOCATE('SQL','MySQL') 位置,
POSITION('SQL' IN 'MySQL') 位置,
INSTR('MySQL','SQL') 位置;


(4).返回指定位置的字符串的函数ELT()
在MySQL软件中可以通过函数ELT()获取指定位置的字符串。查看帮助文档,函数ELT()的定义如下:ELT(n,str1,str2…)上述函数将会返回第n个字符串。
SELECT ELT(1,'MySQL','orcle','sql server') 第1个位置的字符串;


(5).选择字符串的函数MAKE_SET()
在MySQL软件中可以通过函数MAKE_SET()获取字符串,查看帮助文档,函数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') 选取后的字符串;

1.6  从现有字符串中截取子字符串


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


1.从左边或右边截取子字符串
LEFT(str,num)
RIGHT(str,num)


2.截取指定位置和长度子字符串
SUBSTRING(str,num,len)
MID(str,num,len)

1.7去除字符串的首尾空格

在MySQL软件中提供了丰富函数去实现去除字符串空格功能,分别为函数LTRIM()、函数RTRIM()和函数TRIM()。


1.去除字符串开始处空格
LTRIM(str) 


2.去除字符串结束处空格
RTRIM(str)


3.去除字符串首尾空格
TRIM(str)

1.8替换字符串

    1.使用INSERT()函数
INSERT(str,pos,len,newstr))
SELECT '这是MySQL数据库管理系统' 字符串,
    INSERT('这是MySQL数据库管理系统',3,5,'Oracle') 转换后字符串;
(2)执行SQL函数INSERT(),当替换的起始位置大于字符串长度,具体SQL语句如下:
SELECT '这是MySQL数据库管理系统' 字符串, CHAR_LENGTH('这是MySQL数据库管理系统') 字符串字符数,
    INSERT('这是MySQL数据库管理系统',16,15,'Oracle') 转换后字符串;


(3)执行SQL函数INSERT(),当所要替换的长度大于原来字符串中所剩字符串的长度,则从起始位置开始进行全部替换,具体SQL语句如下
SELECT '这是MySQL数据库管理系统' 字符串,CHAR_LENGTH('MySQL数据库管理系统') 剩余字符数,
    INSERT('这是MySQL数据库管理系统',3,15,'Oracle') 转换后字符串;


    2.使用REPLACE()函数
REPLACE(str,substr,newstr))
SELECT '这是MySQL数据库管理系统' 原字符串,
    REPLACE('这是MySQL数据库管理系统','MySQL','Oracle') 替换后字符串;


2.使用数值函数

2.1 获取随机数
SELECT RAND(),RAND(),RAND(3),RAND(3);


2.2获取整数的函数
CEIL(x)
FLOOR(x)


2.3截取数值函数
在具体应用中,有时候需要对数值的小数位数进行截取。在MySQL软件中,通过函数TRUNCATE()函数实现截取操作。查看帮助文档,函数TRUNCATE()的定义如下:
TRUNCATE(x,y)
SELECT TRUNCATE(903.53567,2),TRUNCATE(903.53567,-1);


2.4四舍五入函数
ROUND(x)
ROUND(x,y)
SELECT ROUND(903.53567),ROUND(-903.53567),
    ROUND(903.53567,2),ROUND(903.53567,-1);

3.使用日期和时间函数

3.1获取当前日期和时间的函数
SELECT NOW() now方式, CURRENT_TIMESTAMP() timestamp方式,
    LOCALTIME() localtime方式,SYSDATE() systemdate方式;


3.2通过各种方式显示日期和时间
SELECT NOW() 当前时间,
    UNIX_TIMESTAMP(NOW()) unix格式,
    FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) 普通格式;
SELECT NOW() 当前时间,
    UNIX_TIMESTAMP() unix格式,
    UNIX_TIMESTAMP(NOW()) unix格式;


3.3获取日期和时间各部分值

SELECT NOW() 当前日期和时间,
    YEAR(NOW()) 年,
    QUARTER(NOW()) 季度,
    MONTH(NOW()) 月,
    WEEK(NOW())星期,
    DAYOFMONTH(NOW()) 天,
    HOUR(NOW()) 小时,
    MINUTE(NOW()) 分,
    SECOND(NOW()) 秒;


3.4 计算日期和时间的函数
SELECT NOW() 当前日期和时间,
    TO_DAYS(NOW()) 相隔天数,
    FROM_DAYS(TO_DAYS(NOW())) 一段时间后日期和时间,
    DATEDIFF(NOW(),'2000-12-01') 相隔天数;

4.使用系统信息函数

4.1获取MySQL系统信息
>SELECT
    VERSION() 版本号,
    DATABASE() 数据库名,
    USER() 用户名;

4.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();

5.加/解密函数

5.1 加密函数password()
> select password('guangzhou'); 该函数在MySQL服务器的鉴定中使用,不应将它用在个人的应用程序中。该加密是单向的,不可逆的。

5.2 加密函数MD5(str)
> select md5('guangzhou'); 该函数为字符串算出一个MD5126比特校验和,该值以32位十六进制数字的二进制字符串形式返回。

5.3 加密函数ENCODE(str, pswd_str)
> select encode('guangzhou','mouse'); 使用’mouse’为密码,加密’guangzhou’.
> select decode(encode('guangzhou','mouse'),'mouse');

6.其他函数

6.1 不同进制的数字进行转换的函数
> select conv('a',16,2), conv(15,10,2),conv(15,10,8), conv(15,10,16);

6.2 IP地址与数字相互转换的函数
> select inet_aton('209.207.224.40');
> select inet_ntoa(3520061480);
点地址转换成数值地址的公式:209*256^3+207*256^2+224*256+40

6.3重复执行指定操作的函数
> select password('guangzhou');
> select benchmark(50000,password('guangzhou')); 测试MySQL处理表达式的速度