视图和函数

/*
aurot:hch
email:yuzhonghe113@126.COMMIT
date:12-06-12
*/
-- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
*1、mysql常用语句
*/

-- 搜索功能
select * FROM openshop_version.user_users#数据库+加表名

-- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
*1、视图
*/
-- 创建视图
/*3. 注意事项
创建视图存在如下注意事项:
(1) 运行创建视图的语句需要用户具有创建视图(CRATE VIEW)的权限,若加了[OR REPLACE]时,还需要用户具有删除视图(DROP VIEW)的权限;
(2) SELECT语句不能包含FROM子句中的子查询;
(3) SELECT语句不能引用系统或用户变量;
(4) SELECT语句不能引用预处理语句参数;
(5) 在存储子程序内,定义不能引用子程序参数或局部变量;
(6) 在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句;
(7) 在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图;
(8) 在视图定义中命名的表必须已存在;
(9) 不能将触发程序与视图关联在一起;
(10) 在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。
*/
CREATE VIEW user_test
AS
SELECT * from user_users WHERE email LIKE "%yuz%"
-- 修改视图
#修改视图的注意事项除了第一条外跟创建视图的注意事项是一样的。第(1)条应改为:
#该语句需要具有针对视图的CREATE VIEW和DROP权限,也需要针对SELECT语句中引用的每一列的某些权限。
alter view user_test as select user_id,email from user_users WHERE email LIKE "%yuz%"
-- 删除视图
/*1. 语法
DROP VIEW [IF EXISTS]
view_name [, view_name] …
[RESTRICT | CASCADE]
该语句用户删除视图,可一次删除多个视图。[IF EXISTS]选项确保语句正确运行。若没有该子句,当指定的视图不存在时,将发生错误。
2. 使用举例
Eg1. 删除在前面的小节中创建的视图purchase_detail:DROP VIEW purchase_detail;
Eg2. 删除一个未知的视图:DROP VIEW IF EXISTS test_view;
Eg3. 删除多个视图:DROP VIEW IF EXISTS test_view1, test_view2;
3. 注意事项
必须对要删除的一个或多个视图拥有DROP VIEW的权限*/
DROP VIEW user_test
-- 使用视图
select email FROM user_test

-- ------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
*2、建立 存储过程
可以加参数create procedure pr_add(a int,b int)
使用LEAVE语句强制退出存储过程
*/
CREATE PROCEDURE useCursor()
BEGIN
-- 定义变量
declare tmpName varchar(20) default '' ;
DECLARE no_more_record,pid Integer ;
declare uid varchar(60);
declare old_pay_points decimal(10,2);
-- 定义游标
DECLARE cur_user CURSOR FOR select u.user_id,u.pay_points from user_users u ;
/* mysql 不知道为什么用异常加入判断 ?
* 此请参考官方文档 20.2.11. 光标 光标
* 这把 游标 异常后 捕捉
* 并设置 循环使用 变量 no_more_record 为 1 跳出循环。
*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record=1; -- 游标结束后设置变量值
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET no_more_record=1;
-- 默认变量值
set no_more_record=0;
open cur_user; -- 打开游标
repeat -- 循环
fetch cur_user into uid,old_pay_points; -- FETCH 获取游标当前指针的记录,并传给指定变量列表,注意变量数必须与MySQL游标返回的字段数一致,要获得多行数据,使用循环语句去执行FETCH
IF(old_pay_points<0) then
set old_pay_points = 0;
end if;
insert into user_points(user_id,point_type,plan_points,fact_points,point_time,point_type_name)values(uid,'0',0,old_pay_points,NOW(),'期初积分');
until no_more_record end repeat; -- 循环结束 可以用while替换
close cur_user;-- 关闭游标
set no_more_record=0;
END -- begin结束
-- 第二个实例
/*初始化*/
drop procedure if exists useCursor

/*建立 存储过程 create */
CREATE PROCEDURE useCursor()
BEGIN
/*局部变量的定义 declare*/
declare tmpName varchar(20) default '' ;
declare allName varchar(255) default '' ;

declare cur1 CURSOR FOR SELECT name FROM test.level ;

/* mysql 不知道为什么用异常加入判断 ?
* 此请参考官方文档 20.2.11. 光标 光标
* 这把 游标 异常后 捕捉
* 并设置 循环使用 变量 tmpname 为 null 跳出循环。
*/
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;


/*开游标*/
OPEN cur1;
/*游标向下走一步*/
FETCH cur1 INTO tmpName;

/* 循环体 这很明显 把游标查询出的 name 都加起并用 ; 号隔开 */
WHILE ( tmpname is not null) DO
set tmpName = CONCAT(tmpName ,";") ;
set allName = CONCAT(allName ,tmpName) ;
/*游标向下走一步*/
FETCH cur1 INTO tmpName;
END WHILE; #货用repeat替换

CLOSE cur1;

select allName ;
END;
-- 条用存储过程
call useCursor()

-- 删除存储过程
drop procedure if exists useCursor

-- ------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
*一、字符串处理函数
*/

-- 返回字符的ascii编码
select ASCII('dx');-- 返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
select ORD('de');
select CONV("a",16,2);# CONV(N,from_base,to_base) 在不同的数字基之间变换数字。返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参数是NULL,返回NULL。参数N解释为一个整数,但是可以指定为一个整数或一个字符串。最小基是2且最大的基是36。如果to_base是一个负数,N被认为是一个有符号数,否则,N被当作无符号数。 CONV以64位点精度工作。
/*BIN(N)
-- 十进制转为八进制
返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是NULL,返回NULL。
*/
select BIN(12);
-- 十进制转为八进制
select OCT(12);#OCT(N) 返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,返回NULL。
-- HEX(N) 返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果N是NULL,返回NULL。
select HEX(255);
-- 连接字符
select CHAR(77,121,83,81,'76');#CHAR(N,...) CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。NULL值被跳过。
select CONCAT('My', 'S', 'QL');# CONCAT(str1,str2,...) 返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
-- 返回字符串str的长度。
select LENGTH('text');
select OCTET_LENGTH('text');
select CHAR_LENGTH('text'); #注意,对于多字节字符,其CHAR_LENGTH()仅计算一次。
select CHARACTER_LENGTH('text');
-- 字符第一次出现位置
select LOCATE('bar', 'foobarbar');#LOCATE(substr,str) 返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
select LOCATE('bar', 'foobarbar',5);#LOCATE(substr,str,pos) 返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
select INSTR('foobarbar', 'bar');#INSTR(str,substr) 返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被颠倒。
-- 字符串中插入字符
select LPAD('hua',5,'hechun');#LPAD(str,len,padstr) 返回字符串str,左面用字符串padstr填补直到str是len个字符长。
select RPAD('hua',5,'hechun');#RPAD(str,len,padstr) 返回字符串str,右面用字符串padstr填补直到str是len个字符长。
-- 截取字符
select LEFT('foobarbar', 5);#LEFT(str,len) 返回字符串str的最左面len个字符。
select RIGHT('foobarbar', 4);#RIGHT(str,len) 返回字符串str的最右面len个字符。
select SUBSTRING('Quadratically',5,6);#SUBSTRING(str,pos,len)和mid一样 从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。
select SUBSTRING('Quadratically',5);#SUBSTRING(str,pos) 从字符串str的起始位置pos返回一个子串。
select MID('Quadratically',5);
select MID('Quadratically',5,6);
select SUBSTRING_INDEX('www.mysql.com', '.', 2);#SUBSTRING_INDEX(str,delim,count) 返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边
-- 删除字符串中某些字符
select LTRIM(' barbar');#LTRIM(str) 返回删除了其前置空格字符的字符串str。
select RTRIM('barbar ');#RTRIM(str) 返回删除了其拖后空格字符的字符串str
select TRIM(' bar ');#DING | TRAILING] [remstr] FROM] str) 返回字符串str,其所有remstr前缀或后缀被删除了。如果没有修饰符BOTH、LEADING或TRAILING给出,BOTH被假定。如果remstr没被指定,空格被删除。
select TRIM(LEADING 'x' FROM 'xxxbarxxx');
select TRIM(BOTH 'x' FROM 'xxxbarxxx');
select TRIM(TRAILING 'xyz' FROM 'barxxyz');
-- 返回str的一个同音字符串
select SOUNDEX('Hello');#SOUNDEX(str) 返回str的一个同音字符串。听起来“大致相同”的2个字符串应该有相同的同音字符串。一个“标准”的同音字符串长是4个字符,但是SOUNDEX()函数返回一个任意长的字符串。你可以在结果上使用SUBSTRING()得到一个“标准”的 同音串。所有非数字字母字符在给定的字符串中被忽略。所有在A-Z之外的字符国际字母被当作元音。
-- 空格字符
select SPACE(6);#SPACE(N) 返回由N个空格字符组成的一个字符串。
-- 替代字符
select REPLACE('www.mysql.com', 'w', 'Ww');#REPLACE(str,from_str,to_str) 返回字符串str,其字符串from_str的所有出现由字符串to_str代替。
-- 重复字符
select REPEAT('MySQL', 3);#REPEAT(str,count) 返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果str或count是NULL,返回NULL。
-- 颠倒字符
select REVERSE('abc');#REVERSE(str) 返回颠倒字符顺序的字符串str。
-- 插入字符
select INSERT('Quadratic', 3, 4, 'What');#INSERT(str,pos,len,newstr) 返回字符串str,在位置pos起始的子串且len个字符长得子串由字符串newstr代替。
-- 返回某个字符串
select ELT(1, 'ej', 'Heja', 'hej', 'foo');#ELT(N,str1,str2,str3,...) 如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。
-- 返回str在str1, str2, str3, ...清单的索引
select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');#FIELD(str,str1,str2,str3,...) 返回str在str1, str2, str3, ...清单的索引。如果str没找到,返回0。FIELD()是ELT()反运算。
select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-- 返回字符串表中的位置的值
SELECT FIND_IN_SET('b','a,b,c,d');#FIND_IN_SET(str,strlist) 如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,FIND_IN_SET()函数被优化而使用位运算!如果str不是在strlist里面或如果strlist是空字符串,返回0。如果任何一个参数是NULL,返回NULL。如果第一个参数包含一个“,”,该函数将工作不正常。
#MAKE_SET(bits,str1,str2,...) 返回一个集合 (包含由“,”字符分隔的子串组成的一个字符串),由相应的位在bits集合中的的字符串组成。str1对应于位0,str2对应位1,等等。在str1, str2, ...中的NULL串不添加到结果中。
SELECT MAKE_SET(1,'a','b','c');
SELECT MAKE_SET(1 | 4,'hello','nice','world');
SELECT MAKE_SET(0,'a','b','c');
select EXPORT_SET(5,'Y','N',',',4)#EXPORT_SET(bits,on,off,[separator,[number_of_bits]]) 返回一个字符串,在这里对于在“bits”中设定每一位,你得到一个“on”字符串,并且对于每个复位(reset)的位,你得到一个“off”字符串。每个字符串用“separator”分隔(缺省“,”),并且只有“bits”的“number_of_bits” (缺省64)位被使用。
-- 大小写转换
select LCASE('QUADRATadfadfa');#转为小写
select LOWER('QUADRATadfadfa');
select UCASE('QUADRATadfadfa');
select UPPER('QUADRATadfadfa');
-- 读入文件
#LOAD_FILE(file_name) 读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,而且你必须有file权限。文件必须所有内容都是可读的并且小于max_allowed_packet。如果文件不存在或由于上面原因之一不能被读出,函数返回NULL。
UPDATE table_name
SET blob_column=LOAD_FILE("/tmp/picture")
WHERE id=1;
-- MySQL必要时自动变换数字为字符串,并且反过来也如此
SELECT 1+"1";
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
*二、流程控制
*/
/*-- 1、CASE WHEN THEN 函数 #函数用法说明:在第一个方案的返回结果中, value =compare-value 。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为 ELSE 后的结果,如果没有 ELSE 部分,则返回值为 NUL
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;

-- 2、条件语句 IF 函数用法语法: IF(expr1,expr2,expr3)函数用法说明:如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL) ,则 IF() 的返回值为 expr2 ; 否则返回值则为 expr3 。 IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定
if 条件 then
statement
else
statement
end if;

-- 3.区块定义,常用
begin
......
end;
#也可以给区块起别名,如:
lable:begin
...........
end lable;

-- 4.循环语句
(1)while循环
[label:] WHILE expression DO

statements

END WHILE [label] ;

(2).loop循环
[label:] LOOP

statements

END LOOP [label];

(3).repeat until循环
[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;*/

分支

1)、if-then-else分支

if condition then

commands;

else if condition then

commands;

else

commands

end if;

2)、case分支(两种变体)

//变体一

case expression

when value1 then commands;

when value2 then commands;

...

else commands;

end case;

//变体二

case

when condition then commands;

when condition2 then commands;

...

else commands;

end case;

循环

1)、repeat-until循环

类似于java中的 do while循环体;整个循环至少会执行一次。

[loopname:] repeat

commands

util condition

end repreat [loopname:];

2)、while do循环

类似于java中的while循环

[loopname:] while condition do

commands

end while [loopname:];

3)、loop循环

在这种循环结构里,关键字loop和end loop之间的语句将一直执行直到遇见一条leave loopname命令并因此退出整个循环。在实际运用中几乎总是要用到loopname作为标号。

loopname: loop

commands;

end loop loopname;

4)、leave和iterate语句

leave loopname命令:

将使程序代码的执行流程跳出一个循环,该命令还可以用来提前推出begin-end语句块

iterate loopname命令:

将使循环体内的命令再执行一遍,不能用在begin-end语句块中
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
*三、数学函数
*/
select ABS(-7) #返回 X 的绝对值
ACOS(X )#函数使用说明:返回 X 反余弦 , 即 , 余弦是 X 的值。若 X 不在 -1 到 1 的范围之内,则返回 NULL 。
ASIN ( X )#函数使用说明:返回X 的反正弦,即,正弦为X 的值。若X 若X 不在-1 到 1 的范围之内,则返回 NULL 。
ATAN(X )#函数使用说明:返回 X 的反正切,即,正切为 X 的值。
ATAN(Y ,X ) , ATAN2(Y ,X )#函数使用说明:返回两个变量 X 及 Y 的反正切。 它类似于 Y 或 X 的反正切计算 , 除非两个参数的符号均用于确定结果所在象限。
CEILING(X ) CEIL(X )#函数使用说明:返回不小于 X 的最小整数值。
COS(X )#函数使用说明:返回 X 的余弦,其中 X 在弧度上已知。
COT(X )#函数使用说明:返回 X 的余切
CRC32(expr )#函数使用说明:计算循环冗余码校验值并返回一个 32 比特无符号值。若参数为 NULL ,则结果为 NULL 。该参数应为一个字符串,而且在不是字符串的情况下会被作为字符串处理(若有可能)
DEGREES(X ) #函数使用说明:返回参数 X , 该参数由弧度被转化为度。
EXP(X )#函数使用说明:返回 e 的 X 乘方后的值 ( 自然对数的底 ) 。
FLOOR(X )#函数使用说明:返回不大于 X 的最大整数值 。
FORMAT(X ,D )#函数使用说明:将数字 X 的格式写成 '#,###,###.##' 格式 , 即保留小数点后 D 位,而第 D 位的保留方式为四舍五入,然后将结果以字符串的形式返回
LN(X )#函数使用说明:返回 X 的自然对数 , 即 , X 相对于基数 e 的对数
LOG(X ) LOG(B ,X )#函数使用说明:若用一个参数调用,这个函数就会返回 X 的自然对数。
LOG2(X )#函数使用说明:返回 X 的基数为 2 的对数。
LOG10(X )#函数使用说明:返回 X 的基数为 10 的对数。
MOD(N ,M ) , N % M N MOD M#函数使用说明: 模操作。返回 N 被 M 除后的余数。
PI()#函数使用说明:返回 ϖ (pi) 的值。默认的显示小数位数是 7 位 , 然而 MySQL 内部会使用完全双精度值。
POW(X ,Y ) , POWER(X ,Y )#函数使用说明:返回 X 的 Y 乘方的结果值。
RADIANS(X )#函数使用说明:返回由度转化为弧度的参数 X , ( 注意 ϖ 弧度等于 180 度)。
RAND() RAND(N )#函数使用说明:返回一个随机浮点值 v ,范围在 0 到 1 之间 ( 即 , 其范围为 0 ≤ v ≤ 1.0) 。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。
ROUND(X ) ROUND(X ,D )#函数使用说明:返回参数 X , 其值接近于最近似的整数。在有两个参数的情况下,返回 X ,其值保留到小数点后 D 位,而第 D 位的保留方式为四舍五入。若要接保留 X 值小数点左边的 D 位,可将 D 设为负值。
SIGN(X )#函数使用说明:返回参数作为 -1 、 0 或 1 的符号,该符号取决于 X 的值为负、零或正。
SIN(X )#函数使用说明:返回 X 正弦,其中 X 在弧度中被给定。
SQRT(X )#函数使用说明: 返回非负数 X 的二次方根。
TAN(X )#函数使用说明: 返回 X 的正切,其中 X 在弧度中被给定。
TRUNCATE(X ,D )#函数使用说明: 返回被舍去至小数点后 D 位的数字 X 。若 D 的值为 0, 则结果不带有小数点或不带有小数部分。可以将 D 设为负数 , 若要截去 ( 归零 ) X 小数点左起第 D 位开始后面所有低位的值

-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
*三、时间函数
*/
TO_DAYS
  SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; #这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:

-- 返回日期的星期几
DAYOFWEEK
  select DAYOFWEEK('2012/06/12'); #DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
  select DAYOFWEEK('2012-06-12');
WEEKDAY
  select WEEKDAY('1997-10-04 22:23:00'); #WEEKDAY(date) 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
  select WEEKDAY('1997-11-05');

-- 返回日期在月的中第几天
DAYOFMONTH
  select DAYOFMONTH('1998-02-25'); #DAYOFMONTH(date) 返回date的月份中日期,在1到31范围内。

-- 返回日期在年的中第几天
DAYOFYEAR
  select DAYOFYEAR('1998-02-03'); #DAYOFYEAR(date) 返回date在一年中的日数, 在1到366范围内。

-- 返回月份
MONTH
  select MONTH('1998-02-03'); #MONTH(date) 返回date的月份,范围1到12。

-- DAYNAME(date) 返回date的星期名字。
DAYNAME
  select DAYNAME("1998-02-05");

-- MONTHNAME(date) 返回date的月份名字。
MONTHNAME
  select MONTHNAME("1998-02-05");

-- QUARTER(date) 返回date一年中的季度,范围1到4。
QUARTER
  select QUARTER('98-04-01');

WEEK
  select WEEK('1998-02-20'); #WEEK(date,first) 对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。
  select WEEK('1998-02-20',0);
  select WEEK('1998-02-20',1);
YEAR
  select YEAR('98-02-03');#YEAR(date) 返回date的年份,范围在1000到9999。
HOUR
  select HOUR('10:05:03');#HOUR(time) 返回time的小时,范围是0到23。
MINUTE
  select MINUTE('98-02-03 10:05:03'); #MINUTE(time) 返回time的分钟,范围是0到59。
SECOND
  select SECOND('10:05:03');#SECOND(time) 回来time的秒数,范围是0到59。

-- 加月份
PERIOD_ADD
  select PERIOD_ADD(9801,2); #PERIOD_ADD(P,N) 增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。

-- 返回两个时间段的月数
  select PERIOD_DIFF(9802,199703); #PERIOD_DIFF(P1,P2) 返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。

  LAST_DAY(date )#函数使用说明:获取一个日期或日期时间值,返回该月最后一天对应的值。若参数无效,则返回 NULL 。

-- 时间处理
DATE_ADD(date,INTERVAL expr type)  
DATE_SUB(date,INTERVAL expr type)   
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
  这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。
  在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的
  DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以
  一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期
  中返回“type”间隔。下表显示了type和expr参数怎样被关联: type值 含义 期望的expr格式
  SECOND 秒 SECONDS
  MINUTE 分钟 MINUTES
  HOUR 时间 HOURS
  DAY 天 DAYS
  MONTH 月 MONTHS
  YEAR 年 YEARS
  MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
  HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
  DAY_HOUR 天和小时 "DAYS HOURS"
  YEAR_MONTH 年和月 "YEARS-MONTHS"
  HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
  DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
  DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
  MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。
INTERVAL   
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
  -> 1998-01-01 00:00:00
  mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
  -> 1998-01-01
  mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
  -> 1997-12-31 23:59:59
DATE_ADD
  mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
  INTERVAL 1 SECOND);
  -> 1998-01-01 00:00:00
  mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
  INTERVAL 1 DAY);
  -> 1998-01-01 23:59:59
  mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
  INTERVAL "1:1" MINUTE_SECOND);
  -> 1998-01-01 00:01:00
DATE_SUB
  mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
  INTERVAL "1 1:1:1" DAY_SECOND);
  -> 1997-12-30 22:58:59
DATE_ADD
  mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
  INTERVAL "-1 10" DAY_HOUR);
  -> 1997-12-30 14:00:00
DATE_SUB
  mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
  -> 1997-12-02
EXTRACT
  mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
  -> 1999
  mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
  -> 199907
  mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
  -> 20102
  如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。
  mysql> select DATE_ADD('1998-01-30', Interval 1 month);
  -> 1998-02-28
  注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。

-- 时间格式
TO_DAYS(date)
  给出一个日期date,返回一个天数(从0年的天数)。
  mysql> select TO_DAYS(950501);
  -> 728779
  mysql> select TO_DAYS('1997-10-07');
  -> 729669
  TO_DAYS()
  不打算用于使用格列高里历(1582)出现前的值。
FROM_DAYS(N)
  给出一个天数N,返回一个DATE值。
  mysql> select FROM_DAYS(729669);
  -> '1997-10-07'
DATE_FORMAT(date,format)
  根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)
  %W 星期名字(Sunday……Saturday)
  %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
  %Y 年, 数字, 4 位
  %y 年, 数字, 2 位
  %a 缩写的星期名字(Sun……Sat)
  %d 月份中的天数, 数字(00……31)
  %e 月份中的天数, 数字(0……31)
  %m 月, 数字(01……12)
  %c 月, 数字(1……12)
  %b 缩写的月份名字(Jan……Dec)
  %j 一年中的天数(001……366)
  %H 小时(00……23)
  %k 小时(0……23)
  %h 小时(01……12)
  %I 小时(01……12)
  %l 小时(1……12)
  %i 分钟, 数字(00……59)
  %r 时间,12 小时(hh:mm:ss [AP]M)
  %T 时间,24 小时(hh:mm:ss)
  %S 秒(00……59)
  %s 秒(00……59)
  %p AM或PM
  %w 一个星期中的天数(0=Sunday ……6=Saturday )
  %U 星期(0……52), 这里星期天是星期的第一天
  %u 星期(0……52), 这里星期一是星期的第一天
  %% 一个文字“%”。
  所有的其他字符不做解释被复制到结果中。
  mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
  -> 'Saturday October 1997'
  mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
  -> '22:23:00'
  mysql> select DATE_FORMAT('1997-10-04 22:23:00',
  '%D %y %a %d %m %b %j');
  -> '4th 97 Sat 04 10 Oct 277'
  mysql> select DATE_FORMAT('1997-10-04 22:23:00',
  '%H %k %I %r %T %S %w');
  -> '22 22 10 10:23:00 PM 22:23:00 00 6'
  MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。
TIME_FORMAT(time,format)
  这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。其他修饰符产生一个NULL值或0。
  
  CURDATE()

-- 获取时间值
CURDATE();
  select CURDATE(); #CURRENT_DATE 以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
  select CURTIME(); #CURRENT_TIME 以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
NOW()
  select NOW();#获取当时时间
  select SYSDATE(); #获取当时时间

-- 时间和时间戳的转化
CURRENT_TIMESTAMP
  以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。
  mysql> select NOW();
  -> '1997-12-15 23:50:26'
  mysql> select NOW() + 0;
  -> 19971215235026

UNIX_TIMESTAMP()
   
  UNIX_TIMESTAMP(date)
  如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
  mysql> select UNIX_TIMESTAMP();
  -> 882226357
  mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
  -> 875996580
  当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。
FROM_UNIXTIME(unix_timestamp)
  以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。
  mysql> select FROM_UNIXTIME(875996580);
  -> '1997-10-04 22:23:00'
  mysql> select FROM_UNIXTIME(875996580) + 0;
  -> 19971004222300
  FROM_UNIXTIME(unix_timestamp,format)
  返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。
  mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
  '%Y %D %M %h:%i:%s %x');
  -> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
  返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。
  mysql> select SEC_TO_TIME(2378);
  -> '00:39:38'
  mysql> select SEC_TO_TIME(2378) + 0;
  -> 3938
TIME_TO_SEC(time)
  返回time参数,转换成秒。
  mysql> select TIME_TO_SEC('22:23:00');
  -> 80580
  mysql> select TIME_TO_SEC('00:39:38');
  -> 2378
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 五全文搜索功能函数
*/

a) 函数 MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 六、 加密函数
*/

AES_ENCRYPT(str ,key_str ) , AES_DECRYPT(crypt_str ,key_str )#函数使用说明:这些函数允许使用官方 AES 进行加密和数据加密 ( 高级加密标准 ) 算法 , 即以前人们所熟知的 “Rijndael” 。 保密关键字的长度为 128 比特,不过你可以通过改变源而将其延长到 256 比特。我们选择了 128 比特的原因是它的速度要快得多,且对于大多数用途而言这个保密程度已经够用。
DECODE(crypt_str ,pass_str )#函数使用说明:使用 pass_str 作为密码,解密加密字符串 crypt_str , crypt_str 应该是由 ENCODE() 返回的字符串。
ENCODE(str ,pass_str )#函数使用说明:使用 pass_str 作为密码,解密 str 。 使用 DECODE() 解密结果。
DES_DECRYPT(crypt_str [,key_str ])#函数使用说明:使用 DES_ENCRYPT() 加密一个字符串。若出现错误,这个函数会返回 NULL 。
DES_ENCRYPT(str [,(key_num |key_str )])#函数使用说明:用 Triple-DES 算法给出的关键字加密字符串。若出现错误,这个函数会返回 NULL 。
ENCRYPT(str [,salt ])#函数使用说明:使用 Unix crypt() 系统调用加密 str 。 salt 参数应为一个至少包含 2 个字符的字符串。若没有给出 salt 参数,则使用任意值。
MD5(str )#函数使用说明:为字符串算出一个 MD5 128 比特检查和。该值以 32 位十六进制数字的二进制字符串的形式返回 , 若参数为 NULL 则会返回 NULL 。例如,返回值可被用作散列关键字
OLD_PASSWORD(str )#函数使用说明:当 PASSWORD() 的执行变为改善安全性时, OLD_PASSWORD() 会被添加到 MySQL 。 OLD_PASSWORD() 返回从前的 PASSWORD() 执行值 ( 4.1 之前 ) ,同时允许你为任何 4.1 之前的需要连接到你的 5.1 版本 MySQL 服务器前客户端设置密码,从而不至于将它们切断
PASSWORD(str )#函数使用说明:从原文密码str 计算并返回密码字符串,当参数为 NULL 时返回 NULL 。这个函数用于用户授权表的Password 列中的加密MySQL 密码存储
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 七、 信息函数
*/

BENCHMARK(count ,expr )#函数使用说明: BENCHMARK() 函数重复 count 次执行表达式 expr 。 它可以被用于计算 MySQL 处理表达式的速度。结果值通常为 0 。另一种用处来自 mysql 客户端内部 , 能够报告问询执行的次数
CHARSET(str )#函数使用说明:返回字符串自变量的字符集。
COERCIBILITY(str )#函数使用说明:返回字符串自变量的整序可压缩性值。
COLLATION(str )#函数使用说明:返回惠字符串参数的排序方式。
CONNECTION_ID()#函数使用说明:返回对于连接的连接 ID ( 线程 ID) 。每个连接都有各自的唯一 ID 。
CURRENT_USER, CURRENT_USER()#函数使用说明:返回当前话路被验证的用户名和主机名组合。这个值符合确定你的存取权限的 MySQL 账户。在被指定 SQL SECURITY DEFINER 特征的存储程序内, CURRENT_USER() 返回程序的创建者
DATABASE()#函数使用说明:返回使用 utf8 字符集的默认 ( 当前 ) 数据库名。在存储程序里,默认数据库是同该程序向关联的数据库,但并不一定与调用语境的默认数据库相同。
FOUND_ROWS()#函数使用说明: A SELECT 语句可能包括一个 LIMIT 子句,用来限制服务器返回客户端的行数。在有些情况下,需要不用再次运行该语句而得知在没有 LIMIT 时到底该语句返回了多少行。为了知道这个行数 , 包括在 SELECT 语句中选择 SQL_CALC_FOUND_ROWS ,随后调用 FOUND_ROWS()
LAST_INSERT_ID() LAST_INSERT_ID(expr )#函数使用说明:自动返回最后一个 INSERT 或 UPDATE 问询为 AUTO_INCREMENT 列设置的第一个 发生的值。
ROW_COUNT()#函数使用说明: ROW_COUNT() 返回被前面语句升级的、插入的或删除的行数。 这个行数和 mysql 客户端显示的行数及 mysql_affected_rows() C API 函数返回的值相同。
SCHEMA()#函数使用说明:这个函数和 DATABASE() 具有相同的意义
SESSION_USER()#函数使用说明: SESSION_USER() 和 USER() 具有相同的意义。
SYSTEM_USER()#函数使用说明: SYSTEM_USER() 合 USER() 具有相同的意义
USER()#函数使用说明:返回当前 MySQL 用户名和机主名
VERSION()

#函数使用说明:返回指示 MySQL 服务器版本的字符串。这个字符串使用 utf8 字符集。
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 八、 其他函数
*/

DEFAULT(col_name )#函数使用说明:返回一个表列的默认值。若该列没有默认值则会产生错误。
FORMAT(X ,D )#函数使用说明:将数字 X 的格式写为 '#,###,###.##', 以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。
GET_LOCK(str ,timeout )#函数使用说明:设法使用字符串 str 给定的名字得到一个锁, 超时为 timeout 秒。若成功得到锁,则返回 1 ,若操作超时则返回 0 ( 例如 , 由于另一个客户端已提前封锁了这个名字 ), 若发生错误则返回 NULL ( 诸如缺乏记忆或线程 mysqladmin kill 被断开 ) 。假如你有一个用 GET_LOCK() 得到的锁,当你执行 RELEASE_LOCK() 或你的连接断开 ( 正常或非正常 ) 时,这个锁就会解除
INET_ATON(expr )#函数使用说明:给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是 4 或 8 比特地址。
INET_NTOA(expr )#函数使用说明:给定一个数字网络地址 (4 或 8 比特 ), 返回作为字符串的该地址的电地址表示
IS_FREE_LOCK(str )#函数使用说明:检查名为 str 的锁是否可以使用 ( 换言之 , 没有被封锁 ) 。若锁可以使用,则返回 1 ( 没有人在用这个锁 ), 若这个锁正在被使用,则返回 0 ,出现错误则返回 NULL ( 诸如不正确的参数 ) 。
IS_USED_LOCK(str )#函数使用说明:检查名为 str 的锁是否正在被使用 ( 换言之 , 被封锁 ) 。若被封锁,则返回使用该锁的客户端的连接标识符。否则返回 NULL 。
MASTER_POS_WAIT(log_name ,log_pos [,timeout ])#函数使用说明:该函数对于控制主从同步很有用处。它会持续封锁,直到从设备阅读和应用主机记录中所有补充资料到指定的位置。返回值是其为到达指定位置而必须等待的记录事件的数目。若从设备 SQL 线程没有被启动、从设备主机信息尚未初始化、参数不正确或出现任何错误,则该函数返回 NULL 。若超时时间被超过,则返回 -1 。若在 MASTER_POS_WAIT() 等待期间,从设备 SQL 线程中止,则该函数返回 NULL 。若从设备由指定位置通过,则函数会立即返回结果。
NAME_CONST(name ,value )#函数使用说明:返回给定值。 当用来产生一个结果集合列时 , NAME_CONST() 促使该列使用给定名称。
RELEASE_LOCK(str )#函数使用说明:解开被 GET_LOCK() 获取的,用字符串 str 所命名的锁。若锁被解开,则返回 1 ,若改线程尚未创建锁,则返回 0 ( 此时锁没有被解开 ), 若命名的锁不存在,则返回 NULL 。若该锁从未被对 GET_LOCK() 的调用获取,或锁已经被提前解开,则该锁不存在。
SLEEP(duration )#函数使用说明:睡眠 ( 暂停 ) 时间为 duration 参数给定的秒数,然后返回 0 。若 SLEEP() 被中断 , 它会返回 1 。 duration 或许或包括一个给定的以微秒为单位的分数部分。
UUID()#函数使用说明:返回一个通用唯一标识符 (UUID) , UUID 被设计成一个在时间和空间上都独一无二的数字。 2 个对 UUID() 的调用应产生 2 个不同的值,即使这些调用的执行是在两个互不相连的单独电脑上进行。
VALUES(col_name )#函数使用说明:在一个 INSERT … ON DUPLICATE KEY UPDATE … 语句中,你可以在 UPDATE 子句中使用 VALUES(col_name ) 函数,用来访问来自该语句的 INSERT 部分的列值。换言之, UPDATE 子句中的 VALUES(col_name ) 访问需要被插入的 col_name 的值 , 并不会发生重复键冲突。这个函数在多行插入中特别有用。 VALUES() 函数只在 INSERT ... UPDATE 语句中有意义,而在其它情况下只会返回 NULL

-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 九、 聚合函数
*/

AVG([DISTINCT] expr )#函数使用说明:返回 expr 的平均值。 DISTINCT 选项可用于返回 expr 的不同值的平均值。
BIT_AND(expr ) #函数使用说明:返回expr 中所有比特的 bitwise AND 。计算执行的精确度为64 比特(BIGINT) 。若找不到匹配的行,则这个函数返回18446744073709551615 。( 这是无符号 BIGINT 值,所有比特被设置为 1 )。
BIT_OR(expr )#函数使用说明:返回expr 中所有比特的bitwise OR 。计算执行的精确度为64 比特(BIGINT) 。若找不到匹配的行,则函数返回 0 。
BIT_XOR(expr )#函数使用说明:返回expr 中所有比特的bitwise XOR 。计算执行的精确度为64 比特(BIGINT) 。若找不到匹配的行,则函数返回 0 。
COUNT(expr )#函数使用说明:返回SELECT 语句检索到的行中非NULL 值的数目。若找不到匹配的行,则COUNT() 返回 0
COUNT(DISTINCT expr ,[expr ...])#函数使用说明:返回不同的非NULL 值数目。若找不到匹配的项,则COUNT(DISTINCT) 返回 0
GROUP_CONCAT(expr )#函数使用说明:该函数返回带有来自一个组的连接的非NULL 值的字符串结果。其完整的语法如下所示:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr }

[ASC | DESC] [,col_name ...]]

[SEPARATOR str_val ])

MIN([DISTINCT] expr ), MAX([DISTINCT] expr )#函数使用说明:返回 expr 的最小值和最大值。 MIN() 和 MAX() 的取值可以是一个字符串参数;在这些情况下, 它们返回最小或最大字符串值。
STD(expr ) STDDEV(expr )#函数使用说明:返回 expr 的总体标准偏差。这是标准 SQL 的延伸。这个函数的 STDDEV() 形式用来提供和 Oracle 的兼容性。可使用标准 SQL 函数 STDDEV_POP() 进行代替
STDDEV_POP(expr )#函数使用说明:返回expr 的总体标准偏差(VAR_POP() 的平方根) 。你也可以使用 STD() 或STDDEV(), 它们具有相同的意义,然而不是标准的 SQL 。若找不到匹配的行,则STDDEV_POP() 返回 NULL
STDDEV_SAMP(expr )#函数使用说明:返回expr 的样本标准差 ( VAR_SAMP() 的平方根) 。若找不到匹配的行,则STDDEV_SAMP() 返回 NULL
SUM([DISTINCT] expr )#函数使用说明:返回expr 的总数。 若返回集合中无任何行,则 SUM() 返回NULL 。DISTINCT 关键词可用于 MySQL 5.1 中,求得expr 不同值的总和。 若找不到匹配的行,则SUM() 返回 NULL
VAR_POP(expr )#函数使用说明:返回 expr 总体标准方差。它将行视为总体,而不是一个样本, 所以它将行数作为分母。你也可以使用 VARIANCE(), 它具有相同的意义然而不是 标准的 SQL
VAR_SAMP(expr )#函数使用说明:返回expr 的样本方差。更确切的说,分母的数字是行数减去1 。若找不到匹配的行,则VAR_SAMP() 返回NULL
VARIANCE(expr )#函数使用说明:返回expr 的总体标准方差。这是标准SQL 的延伸。可使用标准SQL 函数 VAR_POP() 进行代替。若找不到匹配的项,则VARIANCE() 返回NULL


-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 十、 操作符
*/
算术运算符

+ 加 SET var1=2+2; 4
- 减 SET var2=3-2; 1
* 乘 SET var3=3*2; 6
/ 除 SET var4=10/3; 3.3333
DIV 整除 SET var5=10 DIV 3; 3
% 取模 SET var6=10%3 ; 1

比较运算符

> 大于 1>2 False
< 小于 2<1 False
<= 小于等于 2<=2 True
>= 大于等于 3>=2 True
BETWEEN 在两值之间 5 BETWEEN 1 AND 10 True
NOT BETWEEN 不在两值之间 5 NOT BETWEEN 1 AND 10 False
IN 在集合中 5 IN (1,2,3,4) False
NOT IN 不在集合中 5 NOT IN (1,2,3,4) True
= 等于 2=3 False
<>, != 不等于 2<>3 False
<=> 严格比较两个NULL值是否相等 NULL<=>NULL True
LIKE 简单模式匹配 "Guy Harrison" LIKE "Guy%" True
REGEXP 正则式匹配 "Guy Harrison" REGEXP "[Gg]reg" False
IS NULL 为空 0 IS NULL False
IS NOT NULL 不为空 0 IS NOT NULL True


逻辑运算符

与(AND)
或(OR)
异或(XOR)

位运算符

| 位或
& 位与
<< 左移位
>> 右移位
~ 位非(单目运算,按位取反)
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 十一、 字符串类
*/
CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度
LOAD_FILE (file_name ) //从文件读取内容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置
LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string2 ) //去除后端空格
STRCMP (string1 ,string2 ) //逐字符比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1
mysql> select substring('abcd',0,2);
+-----------------------+
| substring('abcd',0,2) |
+-----------------------+
| |
+-----------------------+
1 row in set (0.00 sec)


mysql> select substring('abcd',1,2);
+-----------------------+
| substring('abcd',1,2) |
+-----------------------+
| ab |
+-----------------------+
1 row in set (0.02 sec)

TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
UCASE (string2 ) //转换成大写
RIGHT(string2,length) //取string2最后length个字符
SPACE(count) //生成count个空格
-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 十二.数学类

*/
ABS (number2 ) //绝对值
BIN (decimal_number ) //十进制转二进制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //进制转换
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小数位数
HEX (DecimalNumber ) //转十六进制
注:HEX()中可传入字符串,则返回其ASC-11码,如HEX('DEF')返回4142143
也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19
LEAST (number , number2 [,..]) //求最小值
MOD (numerator ,denominator ) //求余
POWER (number ,power ) //求指数
RAND([seed]) //随机数
ROUND (number [,decimals ]) //四舍五入,decimals为小数位数]
注:返回类型并非均为整数,如:
(1)默认变为整形值
mysql> select round(1.23);
+-------------+
| round(1.23) |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)

mysql> select round(1.56);
+-------------+
| round(1.56) |
+-------------+
| 2 |
+-------------+
1 row in set (0.00 sec)

(2)可以设定小数位数,返回浮点型数据
mysql> select round(1.567,2);
+----------------+
| round(1.567,2) |
+----------------+
| 1.57 |
+----------------+
1 row in set (0.00 sec)

SIGN (number2 ) //返回符号,正负或0
SQRT(number2) //开平方

-- ------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* 十三.日期时间类

*/

ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分


附:可用在INTERVAL中的类型
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR

原文地址:https://www.cnblogs.com/hechunhua/p/3373714.html