mysql函数和操作符.docx
- 文档编号:5879262
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:124
- 大小:90.05KB
mysql函数和操作符.docx
《mysql函数和操作符.docx》由会员分享,可在线阅读,更多相关《mysql函数和操作符.docx(124页珍藏版)》请在冰点文库上搜索。
mysql函数和操作符
第12章:
函数和操作符
目录
12.1.操作符
12.1.1.操作符优先级
12.1.2.圆括号
12.1.3.比较函数和操作符
12.1.4.逻辑操作符
12.2.控制流程函数
12.3.字符串函数
12.3.1.字符串比较函数
12.4.数值函数
12.4.1.算术操作符
12.4.2.数学函数
12.5.日期和时间函数
12.6.MySQL使用什么日历?
12.7.全文搜索功能
12.7.1.布尔全文搜索
12.7.2.全文搜索带查询扩展
12.7.3.全文停止字
12.7.4.全文限定条件
12.7.5.微调MySQL全文搜索
12.8.Cast函数和操作符
12.9.其他函数
12.9.1.位函数
12.9.2.加密函数
12.9.3.信息函数
12.9.4.其他函数
12.10.与GROUPBY子句同时使用的函数和修改程序
12.10.1.GROUPBY(聚合)函数
12.10.2.GROUPBY修改程序
12.10.3.具有隐含字段的GROUPBY
在SQL语句中,表达式可用于一些诸如SELECT语句的ORDERBY或HAVING子句、SELECT、DELETE或UPDATE语句的WHERE子句或SET语句之类的地方。
使用文本值、column值、NULL值、函数、操作符来书写表达式。
本章叙述了可用于书写MySQL表达式的函数和操作符。
除非在文档编制中对一个函数或操作符另有指定的情况外,一个包含NULL的表达式通常产生一个NULL值。
注释:
在默认状态下,在函数和紧随其后的括号之间不得存在空格。
这能帮助 MySQL分析程序区分一些同函数名相同的函数调用以及表或列。
不过,函数自变量周围允许有空格出现。
可以通过选择--sql-mode=IGNORE_SPACE来打开MySQL服务器的方法使服务器接受函数名后的空格。
个人客户端程序可通过选择mysql_real_connect()的CLIENT_IGNORE_SPACE实现这一状态。
在以上两种情况中,所有的函数名都成为保留字。
请参见5.3.2节,“SQL服务器模式”.
为节省时间,本章中对大多数例子使用简写形式展示了mysql程序的输出结果。
对于以下格式的举例展示:
mysql>SELECTMOD(29,9);
+-----------+
|mod(29,9)|
+-----------+
| 2|
+-----------+
1rowsinset(0.00秒)
使用如下格式进行代替:
mysql>SELECTMOD(29,9);
->2
12.1. 操作符
12.1.1.操作符优先级
12.1.2.圆括号
12.1.3.比较函数和操作符
12.1.4.逻辑操作符
12.1.1. 操作符优先级
以下列表显示了操作符优先级的由低到高的顺序。
排列在同一行的操作符具有相同的优先级。
:
=
||,OR,XOR
&&,AND
NOT
BETWEEN,CASE,WHEN,THEN,ELSE
=,<=>,>=,>,<=,<,<>,!
=,IS,LIKE,REGEXP,IN
|
&
<<,>>
-,+
*,/,DIV,%,MOD
^
-(一元减号),~(一元比特反转)
!
BINARY,COLLATE
注释:
假如HIGH_NOT_PRECEDENCESQL模式被激活,则NOT的优先级同the !
操作符相同。
请参见5.3.2节,“SQL服务器模式”。
12.1.2. 圆括号
∙(...)
使用括弧来规定表达式的运算顺序,例如:
mysql>SELECT1+2*3;
->7
mysql>SELECT(1+2)*3;
->9
12.1.3. 比较函数和操作符
比较运算产生的结果为1(TRUE)、0(FALSE)或NULL。
这些运算可用于数字和字符串。
根据需要,字符串可自动转换为数字,而数字也可自动转换为字符串。
本章中的一些函数(如LEAST()和GREATEST())的所得值不包括1(TRUE)、0(FALSE)和NULL。
然而,其所得值乃是基于按照下述规则运行的比较运算:
MySQL按照以下规则进行数值比较:
∙若有一个或两个参数为NULL,除非NULL-safe<=>等算符,则比较运算的结果为NULL。
∙若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。
∙若两个参数均为整数,则按照整数进行比较。
∙十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。
∙假如参数中的一个为TIMESTAMP或DATETIME列,而其它参数均为常数,则在进行比较前将常数转为timestamp。
这样做的目的是为了使ODBC的进行更加顺利。
注意,这不适合IN()中的参数!
为了更加可靠,在进行对比时通常使用完整的datetime/date/time字符串。
∙在其它情况下,参数作为浮点数进行比较。
在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252Latin1,同时对英语也适合)。
为了进行比较,可使用CAST()函数将某个值转为另外一种类型。
使用CONVERT()将字符串值转为不同的字符集。
请参见12.8节,“Cast函数和操作符”。
以下例子说明了比较运算中将字符串转为数字的过程:
mysql>SELECT1>'6x';
->0
mysql>SELECT7>'6x';
->1
mysql>SELECT0>'x6';
->0
mysql>SELECT0='x6';
->1
注意,在将一个字符串列同一个数字进行比较时,MySQL不能使用列中的索引进行快速查找。
假如str_col是一个编入索引的字符串列,则在以下语句中,索引不能执行查找功能:
SELECT*FROMtbl_nameWHEREstr_col=1;
其原因是许多不同的字符串都可被转换为数值1:
'1'、'1'、'1a'、……
∙=
等于:
mysql>SELECT1=0;
->0
mysql>SELECT'0'=0;
->1
mysql>SELECT'0.0'=0;
->1
mysql>SELECT'0.01'=0;
->0
mysql>SELECT'.01'=0.01;
->1
∙<=>
NULL-safeequal.这个操作符和=操作符执行相同的比较操作,不过在两个操作码均为NULL时,其所得值为1而不为NULL,而当一个操作码为NULL时,其所得值为0而不为NULL。
mysql>SELECT1<=>1,NULL<=>NULL,1<=>NULL;
->1,1,0
mysql>SELECT1=1,NULL=NULL,1=NULL;
->1,NULL,NULL
∙<>!
=
不等于:
mysql>SELECT'.01'<>'0.01';
->1
mysql>SELECT.01<>'0.01';
->0
mysql>SELECT'zapp'<>'zappp';
->1
∙<=
小于或等于:
mysql>SELECT0.1<=2;
->1
∙<
小于:
mysql>SELECT2<2;
->0
∙>=
大于或等于:
mysql>SELECT2>=2;
->1
∙>
大于:
mysql>SELECT2>2;
->0
∙ISboolean_valueISNOTboolean_value
根据一个布尔值来检验一个值,在这里,布尔值可以是TRUE、FALSE或UNKNOWN。
mysql>SELECT1ISTRUE,0ISFALSE,NULLISUNKNOWN;
->1,1,1
mysql>SELECT1ISNOTUNKNOWN,0ISNOTUNKNOWN,NULLISNOTUNKNOWN;
->1,1,0
∙ISNULLISNOTNULL
检验一个值是否为NULL。
mysql>SELECT1ISNULL,0ISNULL,NULLISNULL;
->0,0,1
mysql>SELECT1ISNOTNULL,0ISNOTNULL,NULLISNOTNULL;
->1,1,0
为了能够顺利的使用ODBC程序工作,在使用ISNULL时,MySQL支持一下额外特性:
o在一个值产生后,立即运行一个以下格式的语句,从而找到最新AUTO_INCREMENT值的所在行:
o SELECT*FROMtbl_nameWHEREauto_colISNULL
当设置SQL_AUTO_IS_NULL=0时,这项操作无法运行。
请参见13.5.3节,“SET语法”。
o对于命名为NOTNULL的DATE和DATETIME列,可通过使用如下的语句找到特定日期'0000-00-00':
o SELECT*FROMtbl_nameWHEREdate_columnISNULL
运行这一步需要使用一些ODBC应用软件,因为ODBC本身不支持一个'0000-00-00'的时间值。
∙exprBETWEENminANDmax
假如expr大于或等于min且expr小于或等于max,则BETWEEN的返回值为1,或是0。
若所有参数都是同一类型,则上述关系相当于表达式 (min<=exprANDexpr<=max)。
其它类型的转换根据本章开篇所述规律进行,且适用于3种参数中任意一种。
mysql>SELECT1BETWEEN2AND3;
->0
mysql>SELECT'b'BETWEEN'a'AND'c';
->1
mysql>SELECT2BETWEEN2AND'3';
->1
mysql>SELECT2BETWEEN2AND'x-3';
->0
∙exprNOTBETWEENminANDmax
这相当于NOT(exprBETWEENminANDmax)。
· COALESCE(value,...)
返回值为列表当中的第一个非NULL值,在没有非NULL值得情况下返回值为NULL。
mysql>SELECTCOALESCE(NULL,1);
->1
mysql>SELECTCOALESCE(NULL,NULL,NULL);
->NULL
· GREATEST(value1,value2,...)
当有2或多个参数时,返回值为最大(最大值的)参数。
比较参数所依据的规律同LEAST()相同。
mysql>SELECTGREATEST(2,0);
->2
mysql>SELECTGREATEST(34.0,3.0,5.0,767.0);
->767.0
mysql>SELECTGREATEST('B','A','C');
->'C'
在没有自变量为NULL的情况下,GREATEST()的返回值为NULL。
· exprIN(value,...)
∙若expr为IN列表中的任意一个值,则其返回值为1,否则返回值为0。
假如所有的值都是常数,则其计算和分类根据expr的类型进行。
这时,使用二分搜索来搜索信息。
如IN值列表全部由常数组成,则意味着IN的速度非常之快。
如expr是一个区分大小写的字符串表达式,则字符串比较也按照区分大小写的方式进行。
mysql>SELECT2IN(0,3,5,'wefwf');
->0
mysql>SELECT'wefwf'IN(0,3,5,'wefwf');
->1
IN列表中所列值的个数仅受限于max_allowed_packet值。
为了同SQL标准相一致,在左侧表达式为NULL的情况下,或是表中找不到匹配项或是表中一个表达式为NULL的情况下,IN的返回值均为NULL。
IN()语构也可用书写某些类型的子查询。
请参见13.2.8.3节,“使用ANY、IN和SOME进行子查询”。
· exprNOTIN(value,...)
这与NOT(exprIN(value,...))相同。
∙ISNULL(expr)
如expr为NULL,那么ISNULL()的返回值为1,否则返回值为0。
mysql>SELECTISNULL(1+1);
->0
mysql>SELECTISNULL(1/0);
->1
使用=的NULL值对比通常是错误的。
ISNULL()函数同ISNULL比较操作符具有一些相同的特性。
请参见有关ISNULL的说明。
· INTERVAL(N,N1,N2,N3,...)
假如N 所有的参数均按照整数处理。 为了这个函数的正确运行,必须满足N1 其原因是使用了二分查找(极快速)。 mysql>SELECTINTERVAL(23,1,15,17,30,44,200); ->3 mysql>SELECTINTERVAL(10,1,10,100,1000); ->2 mysql>SELECTINTERVAL(22,23,30,44,200); ->0 · LEAST(value1,value2,...) 在有两个或多个参数的情况下,返回值为最小(最小值)参数。 用一下规则将自变量进行对比: o假如返回值被用在一个INTEGER语境中,或是所有参数均为整数值,则将其作为整数值进行比较。 o假如返回值被用在一个REAL语境中,或所有参数均为实值,则将其作为实值进行比较。 o假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。 o在其它情况下,将参数作为区分大小写的字符串进行比较。 假如任意一个自变量为NULL,则LEAST()的返回值为NULL。 mysql>SELECTLEAST(2,0); ->0 mysql>SELECTLEAST(34.0,3.0,5.0,767.0); ->3.0 mysql>SELECTLEAST('B','A','C'); ->'A' 注意,上面的转换规则在一些边界情形中会产生一些奇特的结果: mysql>SELECTCAST(LEAST(3600,9223372036854775808.0)asSIGNED); ->-9223372036854775808 发生这种情况的原因是MySQL在整数语境中读取9223372036854775808.0。 整数表示法不利于保存数值,因此它包括一个带符号整数。 12.1.4. 逻辑操作符 在SQL中,所有逻辑操作符的求值所得结果均为TRUE、FALSE或NULL(UNKNOWN)。 在MySQL中,它们体现为 1(TRUE)、0(FALSE)和NULL。 其大多数都与不同的数据库SQL通用,然而一些服务器对TRUE的返回值可能是任意一个非零值。 ∙NOT! 逻辑NOT。 当操作数为0时,所得值为1;当操作数为非零值时,所得值为 0,而当操作数为NOTNULL时,所得的返回值为NULL。 mysql>SELECTNOT10; ->0 mysql>SELECTNOT0; ->1 mysql>SELECTNOTNULL; ->NULL mysql>SELECT! (1+1); ->0 mysql>SELECT! 1+1; ->1 最后一个例子产生的结果为1,原因是表达式的计算方式和(! 1)+1相同。 ∙AND&& 逻辑AND。 当所有操作数均为非零值、并且不为NULL时,计算所得结果为 1,当一个或多个操作数为0时,所得结果为0,其余情况返回值为NULL。 mysql>SELECT1&&1; ->1 mysql>SELECT1&&0; ->0 mysql>SELECT1&&NULL; ->NULL mysql>SELECT0&&NULL; ->0 mysql>SELECTNULL&&0; ->0 ∙OR|| 逻辑OR。 当两个操作数均为非NULL值时,如有任意一个操作数为非零值,则结果为1,否则结果为0。 当有一个操作数为NULL时,如另一个操作数为非零值,则结果为1,否则结果为NULL。 假如两个操作数均为 NULL,则所得结果为NULL。 mysql>SELECT1||1; ->1 mysql>SELECT1||0; ->1 mysql>SELECT0||0; ->0 mysql>SELECT0||NULL; ->NULL mysql>SELECT1||NULL; ->1 ∙XOR 逻辑XOR。 当任意一个操作数为NULL时,返回值为NULL。 对于非 NULL的操作数,假如一个奇数操作数为非零值,则计算所得结果为 1,否则为 0。 mysql>SELECT1XOR1; ->0 mysql>SELECT1XOR0; ->1 mysql>SELECT1XORNULL; ->NULL mysql>SELECT1XOR1XOR1; ->1 aXORb的计算等同于 (aAND(NOTb))OR((NOTa)和b)。 同样见12.1.1节,“操作符优先级”。 12.2. 控制流程函数 ∙CASEvalueWHEN[compare-value]THENresult[WHEN[compare-value]THENresult...][ELSEresult]ENDCASEWHEN[condition]THENresult[WHEN[condition]THENresult...][ELSEresult]END 在第一个方案的返回结果中,value=compare-value。 而第二个方案的返回结果是第一种情况的真实结果。 如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE部分,则返回值为NULL。 mysql>SELECTCASE1WHEN1THEN'one' -> WHEN2THEN'two'ELSE'more'END; ->'one' mysql>SELECTCASEWHEN1>0THEN'true'ELSE'false'END; ->'true' mysql>SELECTCASEBINARY'B' -> WHEN'a'THEN1WHEN'b'THEN2END; ->NULL 一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。 如果用在字符串语境中,则返回结果味字符串。 如果用在数字语境中,则返回结果为十进制值、实值或整数值。 ∙IF(expr1,expr2,expr3) 如果expr1是TRUE(expr1<>0andexpr1<>NULL),则IF()的返回值为expr2;否则返回值则为expr3。 IF()的返回值为数字值或字符串值,具体情况视其所在语境而定。 mysql>SELECTIF(1>2,2,3); ->3 mysql>SELECTIF(1<2,'yes','no'); ->'yes' mysql>SELECTIF(STRCMP('test','test1'),'no','yes'); ->'no' 如果expr2或expr3中只有一个明确是NULL,则IF()函数的结果类型为非NULL表达式的结果类型。 expr1作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。 mysql>SELECTIF(0.1,1,0); ->0 mysql>SELECTIF(0.1<>0,1,0); ->1 在所示的第一个例子中,IF(0.1)的返回值为0,原因是0.1被转化为整数值,从而引起一个对IF(0)的检验。 这或许不是你想要的情况。 在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。 比较结果使用整数。 IF()(这一点在其被储存到临时表时很重要)的默认返回值类型按照以下方式计算: 表达式 返回值 expr2或expr3返回值为一个字符串。 字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mysql 函数 操作