1、第12章:函数和操作符目录12.1.操作符12.1.1.操作符优先级12.1.2.圆括号12.1.3.比较函数和操作符12.L4.逻 辑操作符12.2.控制流程函数12.3.字符串函数12.3.1.字符串比较函数124数值函数12.4.1.算术操作符12.42数学 函数12.5.日期和时间函数12.6.MySQL使用什么日历?127全文搜索功能1271.布尔全文搜索1272.全文搜索带查询扩展12.7.3.全文停止字1274.全文限定条件1275.微调MySQL全文搜索12.8.Cast函数和操作符12.9.其他函数12.9.1.位函数1292.加密函数12.9.3.信息函数1294.其他函数
2、12.10.与GROUP BY子句同时使用的函数和修改程序12.10.L GROUP BY(聚合)函数12.102 GROUP BY 修改程序12.10.3.具有隐含字段的GROUP BY在SQL语句中,表达式可用于一些诸如SELECT语句的ORDER BY或HAVING子句、SELECT DELETE或UPDATE语句的WHERE子句或SET语句之类的地方。使用文 本值、column值、NULL值、函数、操作符来书写表达式。本章叙述了可用于 书写MySQL表达式的函数和操作符。除非在文档编制中对一个函数或操作符另有指定的情况外,一个包含NULL的表 达式通常产生一个NULL值。注释:在默认状
3、态下,在函数和紧随其后的括号之间不得存在空格。这能帮 助MySQL分析程序区分一些同函数名相同的函数调用以及表或列。不过,函数 自变量周围允许有空格出现。可以通过选择一sql-mode二IGNORE_SPACE来打开MySQL服务器的方法使服务器接 受函数名后的空格。个人客户端程序可通过选择mysql_real_connect()的 CLIENT_IGNORE_SPACE实现这一状态。在以上两种情况中,而有的函数名都成 为保留字。请参见5.3.2节,“SQL服务器模式”.为节省时间,本章中对大多数例子使用简写形式展示了 mysql程序的输出结果。对于以下格式的举例展示:mysql SELECT
4、 MOD(29,9);+-+|mod(29,9)|+-+I 2|+-+1 rows in set(0.00 秒)使用如下格式进行代替:-212.1.操作符12.1.1.操作符优先级12.1.2.圆括号12.L3.比 较函数和操作符12.L4.逻辑操作符12.1.1.操作符优先级以下列表显示了操作符优先级的由低到高的顺序。排列在同一行的操作符具有相 同的优先级。I I,OR,XOR&,ANDNOTBETWEEN,CASE,WHEN,THEN,ELSE=,=,=,!=IS,LIKE,REGEXP,INI&,一,十*,/,DIV,%,MOD-(一元减号),(一元比特反转)!BINARY,COLLAT
5、E注释:假如HIGH_NOT_PRECEDENCE SQL模式被激活,则NOT的优先级同the!操作符相同。请参见5.3.2节,“SQL服务器模式”。12.1.2.圆括号(.)使川括弧来规定表达式的运算顺序,例如:mysql SELECT 1+2*3;-7mysql SELECT(1+2)*3;-912.1.3.比较函数和操作符 比较运算产生的结果为1(TRUE)、0(FALSE)或NULL。这些运算可用于数字和字 符串。根据需要,字符串可自动转换为数字,而数字也可自动转换为字符串。本章中的一些函数(如LEAST。和GREATEST。)的所得值不包括1(TRUE)、0(FALSE)和NULLo
6、然而,其所得值乃是基于按照下述规则运行的比较运算:MySQL按照以下规则进行数值比较:若有一个或两个参数为NULL,除非NULL-safe 等算符,则比较运算的结果为 NULLo 若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。若两个参数均为整数,则按照整数进行比较。十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。假如参数中的一个为TIMESTAMP或DATETIME歹U,而其它参数均为常数,则在进 行比较前将常数转为timestamp。这样做的目的是为了使ODBC的进行更加顺利。注 意,这不适合IN()中的参数!为了更加可靠,在进行对比时通常使用完整的 dat
7、etime/date/time 字符串。在其它情况下,参数作为浮点数进行比较。在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cpl252 Latinl,同时对英语也适合)。为了进行比较,可使用CASTO函数将某个值转为另外一种类型。使用CONVERT()将字符串值转为不同的字符集。请参见12.8节,“Cast函数和操作符”。以下例子说明了比较运算中将字符串转为数字的过程:mysql SELECT 1 6x;-0mysql SELECT 7 6x;-1 mysql SELECT 0 x6;-0mysql SELECT 0=x6;-1 注意,在将一个字符串列同一个数字进行比较时,M
8、ySQL不能使用列中的索引 进行快速查找。假如是一个编入索引的字符串列,则在以下语句中,索引不能执行查找功能:SELECT*FROM tbl_name WHERE str_col=;其原因是许多不同的字符串都可被转换为数值1:1、1、la、=等于:mysql SELECT 1=0;-0mysql SELECT O=0;-1mysql SELECT 0.0=0;-1mysql SELECT 0.01=0;-0mysql SELECT.01=0.01;-1NULL-safe equal.这个操作符和二操作符执行相同的比较操作,不过在两 个操作码均为NULL时,其所得值为1而不为NULL,而当一个操
9、作码为NULL 时,其所得值为0而不为NULL。mysql SELECT 1=1,NULL NULL,1 NULL;-1,1,0mysql SELECT 1=1,NULL=NULL,1=NULL;-1,NULL,NULL不等于:mysql SELECT.01 0.01;-1mysql SELECT.01 0.01;-0mysql SELECT zapp,zappp,;-1 SELECT 0.1 1 SELECT 2 0=大于或等于:mysql SELECT 2=2;-1大于:mysql SELECT 2 2;-0IS boolean value IS NOT boolean value根据一个
10、布尔值来检验一个值,在这里,布尔值可以是TRUE、FALSE或 UNKNOWNomysql SELECT 1 IS TRUE,0 IS FALSE,NULL IS UNKNOWN;-1,1,1mysql SELECT 1 IS NOT UNKNOWN,0 IS NOT UNKNOWN,NULL IS NOT UNKNOWN;-1,1,0IS NULL IS NOT NULL检验一个值是否为NULLomysql SELECT 1 IS NULL,0 IS NULL,NULL IS NULL;-0,0,1mysql SELECT 1 IS NOT NULL,0 IS NOT NULL,NULL I
11、S NOT NULL;-1,1,0为了能够顺利的使用ODBC程序工作,在使川IS NULL时,MySQL支持一 下额外特性:o在一个值产生后,立即运行一个以下格式的语句,从而找到最新 AUTOJNCREMENT值的所在行:o SELECT*FROM tbl_name WHERE auto_col ISNULL当设置SQL_AUTO_IS_NULL=O时,这项操作无法运行。请参见13.5.3 节,SET语法”。o 对于命名为NOTNULL的DATE和DATETIME歹U,可通过使用如下的 语句找 到特定日期0000-00-00:o SELECT*FROM tbl_name WHERE date_
12、columnIS NULL运行这一步需要使用一些ODBC应用软件,因为ODBC本身不支持 一个0000-00-00的时间值。expr BETWEEN min AND max 假如expr大于或等于min且expr小于或等于%ax,则BETWEEN的返回 值为1,或是0。若所有参数都是同一类型,则上述关系相当于表达式(min=expr AND expr SELECT 1 BETWEEN 2 AND 3;-0mysql SELECT b BETWEEN a AND c;-1mysql SELECT 2 BETWEEN 2 AND 3;-1mysql SELECT 2 BETWEEN 2 AND x
13、3;-0expr NOT BETWEEN min AND max这相当于 NOT expr BETWEEN min AND max)oCOALESCE(value,.)返回值为列表当中的第一个非NULL值,在没有非NULL值得情况下返回 值为NULL omysql SELECT COALESCE(NULL,1);-1mysql SELECT COALESCE(NULL,NULL,NULL);-NULLGREATEST(valuel,value2,.)当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的 规律同LEAST()相同。mysql SELECT GREATEST(2,0
14、);-2mysql SELECT GREATEST(34.0,3.0,5.0,767.0);-767.0mysql SELECT GREATEST(J B,A,C);-,C在没有自变量为NULL的情况下,GREATESTO的返回值为NULL。expr IN(value,.)若expr为IN列表中的任意一个值,则其返回值为1,否则返回值为0。假如所有 的值都是常数,则其计算和分类根据expr的类型进行。这时,使用二分搜索来搜 索信息。如IN值列表全部由常数组成,则意味着IN的速度非常之快。如expr是一 个区分大小写的字符串表达式,则字符串比较也按照区分大小写的方式进行。mysql SELECT
15、 2 IN(0,3,5/wefwf9);-0mysql SELECT wefwf IN(0,3,5,wefwf,);-1IN列表中所列值的个数仅受限于max_allowed_packet值。为了同SQL标准相一致,在左侧表达式为NULL的情况下,或是表中找不 到匹配项或是表中一个表达式为NULL的情况下,IN的返回值均为NULL。IN()语构也可用书写某些类型的子查询。请参见13.2.8.3节,“使用 ANY、IN和SOME进行子查询”。expr NOT IN(value,.)这与 NOT expr IN(侬/e,.)相同。ISNULL(expr)如为NULL,那么ISNULL()的返回值为1
16、否则返回值为0omysql SELECT ISNULL(1+1);-0mysql SELECT ISNULL(1/O);-1使用二的NULL值对比通常是错误的。ISNULLO函数同IS NULL比较操作符具有一些相同的特性。请参见有 关IS NULL的说明。INTERVAL(/K Nl,N2,N3,.)假如腔仞,则返回值为0;假如旌疮等等,则返回值为1;假如为 NULL,则返回值为-1 o所有的参数均按照整数处理。为了这个函数的正 确运行,必须满足Nl N2 N3 SELECT INTERVAL(23,1,15,17,30,44,200);-3mysql SELECT INTERVAL(10
17、1,10,100,1000);-2mysql SELECT INTERVAL(22,23,30,44,200);-0LEAST(valuel,value2,.)在有两个或多个参数的情况下,返回值为最小(最小值)参数。川一下 规则将自变量进行对比:O假如返回值被用在一个INTEGER语境中,或是所有参数均为整数值,则将 其作为整数值进行比较。o假如返回值被用在一个REAL语境中,或所有参数均为实值,则将其作为 实值进行比较。o假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的 字符串进行比较。O在其它情况下,将参数作为区分大小写的字符串进行比较。假如任意一个自变量为NULL,则
18、LEAST。的返回值为NULL。mysql SELECT LEAST(2,0);-0mysql SELECT LEAST(34.0,3.0,5.0,767.0);-3,0mysql SELECT LEAST(B,A,C);-,A注意,上面的转换规则在一些边界情形中会产生一些奇特的结果:mysql SELECT CAST(LEAST(3600,9223372036854775808.0)as SIGNED);-9223372036854775808发生这种情况的原因是MySQL在整数语境中读取92 23372036854775808.0o整数表示法不利于保存数值,因此它包括一个 带符号整数。12
19、1.4.逻辑操作符在SQL中,所有逻辑 操作符的求值所得结果均为TRUE、FALSE或NULL(UNKNOWN)o 在 MySQL 中,它们体现为 1(TRUE)、0(FALSE)和 NULLO 其大 多数都与不同的数据库SQL通用,然而一些服务器对TRUE的返回值可能是任意 一个非零值。NOT!逻辑N0To当操作数为0时,所得值为1;当操作数为非零值时,所得 值为0,而当操作数为NOT NULL时,所得的返回值为NULLomysql SELECT NOT 10;-0mysql SELECT NOT 0;-1mysql SELECT NOT NULL;-NULLmysql SELECT!(1
20、1);-0mysql SELECT!1+1;-1最后一个例子产生的结果为L原因是表达式的计算方式和(!1)+1相同。AND&逻辑AND。当所有操作数均为非零值、并且不为NULL时,计算所得结果 为1,当一个或多个操作数为0时,所得结果为0,其余情况返回值 为 NULL omysql SELECT 1&1;-1mysql SELECT 1&0;-0mysql SELECT 1&NULL;-NULLmysql SELECT 0&NULL;-0mysql SELECT NULL&0;-0OR|逻辑OR。当两个操作数均为非NULL值时,如有任意一个操作数为非零 值,则结果为1,否则结果为0。当有一个
21、操作数为NULL时,如另一个操 作数为非零值,则结果为1,否则结果为NULL o假如两个操作数均 为NULL,则所得结果为NULLomysql SELECT 1|1;-1mysql SELECT 1|0;-1mysql SELECT 0|0;-0mysql SELECT 0|NULL;-NULLmysql SELECT 1|NULL;-1 XOR逻辑X0Ro当任意一个操作数为NULL时,返回值为NULLO对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为1,否则 为0。mysql SELECT 1 XOR 1;-0mysql SELECT 1 XOR 0;-1mysql
22、SELECT 1 XOR NULL;-NULLmysql SELECT 1 XOR 1 XOR 1;-1a XOR b 的计算等同于(a AND(NOT b)OR(NOT a)和 b)。同样见12.LI节,“操作符优先级”。12.2.控制流程函数 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在第一个方案的返回结果中,
23、valucompare-value,而第二个方案的返 何结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为 ELSE后的结果,如果没有ELSE部分,则返回值为NULLomysql SELECT CASE 1 WHEN 1 THEN one-WHEN 2 THEN two ELSE more END;-onemysql SELECT CASE WHEN l0 THEN true ELSE false END;-truemysql SELECT CASE BINARY,B-WHEN a THEN 1 WHEN b THEN 2 END;-NULL一个CASE表达式的默认返回值类型是任何
24、返回值的相容集合类型,但具 体情况视其所在语境而定。如果用在字符串语境中,则返回结果味字符串。如果用在数字语境中,则返回结果为十进制值、实值或整数值。IF(exprl,expr2,expr3)如果 exprl 是 TRUE exprl 0 and exprl NULL),贝U IF()的返回 值为expr2否则返回值则为expr3。IF()的返回值为数字值或字符串 值,具体情况视其所在语境而定。mysql SELECT IF(12,2,3);-3mysql SELECT IF(1,yes,mysql SELECT IF(STRCMP(test,testT),no,yes,);-,no,如果ex
25、pr2或8必73中只有一个明确是NULL,则IF()函数的结果类型 为非NULL表达式的结果类型。exprl作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符 串值,那么应该使用比较运算进行检验。mysql SELECT IF(0.1,1,0);-0mysql SELECT IF(O.100,1,0);-1在所示的第一个例子中,IF(O.l)的返回值为0,原因是0.1被转化为整 数值,从而引起一个对 讦(0)的检验。这或许不是你想要的情况。在第二 个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。比 较结果使用整数。IF0(这一点在其被储存到临时表时很重要)的默认返回值类型
26、按照以 下方式计算:表达式返回值expr2或expr3返回值为一个字符串。字符用expr2或expr3返回值为一个浮点值。浮点expr2或expr3返回值为一个整数。整数假如expr2和expr3都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。IFNU-(exprl,expr2)假如exprl不为NULL,贝U IFNULL()的返回值为exprl否则其返回值 为expr2o IFNULL()的返回值是数字或是字符串,具体情况取决于其所使 用的语境。mysql SELECT IFNULL(1,0);-1mysql SELECT IFNULL(NULL,10);-10mysq
27、l SELECT IFNULL(1/0,10);-10mysql SELECT IFNULL(1/0,yes,);-yesIFNULL(aw7,凶?2)的默认结果值为两个表达式中更加“通用”的一 个,顺序为STRING、REAL或INTEGERo假设一个基于表达式的表的情 况,或MySQL必须在内存储器中储存一个临时表中IFNULLO的返回值:CREATE TABLE tmp SELECT IFNULL(1,test)AS test;在这个例子中,测试列的类型为CHAR(4)o NU LLIF(exprl,expr2)如果exprl-expr2成立,那么返回值为NULL,否则返回值为exprl
28、o 这和 CASE WHEN exprl=expr2 THEN NULL ELSE exprl END 相同。mysql SELECT NULLIF(1,1);-NULLmysql SELECT NULLIF(1,2);-1注意,如果参数不相等,则MySQL两次求得的值为exprl o12.3.字符串函数12.3.L字符串比较函数假如结果的长度大于max_allowed_packet系统变量的最大值时,字符审值函数 的返回值为NULL。请参见7.5.2节,“调节服务器参数”。对于在字符审位置操作的函数,第一个位置的编号为lo ASCII(str)返回值为字符审的最左字符的数值。假如S5为空字符
29、审,则返回 值为0。假如为NULL,则返回值为NULLo ASCII。用于带有从0 到255的数值的字符。mysql SELECT ASCII C 23;-50mysql SELECT ASCII(2);-50mysql SELECT ASCIIC dx?);-100见ORD()函数。BIN(/V)返回值为N的二进制值的字符审表示,其中N为一个longlong(BIGINT)数字。这等同于CONV(凡10,2)。假如一为NULL,则返回值为NULLomysql SELECT BIN(12);-nooBIT_LENGTH(str)返回值为二进制的字符审str长度。mysql SELECT BIT
30、LENGTH(,text,);-32CHAR(A/,.USING charset)CHAR()将每个参数理解为一个整数,其返回值为一个包含这些整数的代 码值所给出的字符的字符审。NULL值被省略。mysql SELECT CHAR(77,121,83,81,,76,);-MySQLmysql SELECT CHAR(77,77.3/77.3);-大于255的CHAR()参数被转换为多结果字符。例如,CHAR(256)相当于 CHAR(1,0),而 CHAR(256*256)则相当于 CHAR(1,0,0):mysql SELECT HEX(CHAR(1,0),HEX(CHAR(256);+-
31、I HEX(CHAR(1,0)|HEX(CHAR(256)|+-+-+01000100+-.+mysql SELECT HEX(CHAR(1,0,0),HEX(CHAR(256*256);+-+-+I HEX(CHAR(1,0,0)|HEX(CHAR(256*256)|+-+-+|010000|010000|+-+-+CHAR()的返回值为一个二进制字符审。可选择使用USING语句产生一个给 出的字符集中的字符串:mysql SELECT CHARSET(CHAR(0 x65),CHARSET(CHAR(0 x65 USING utf8);mysql SELECT CHARSET(CHA
32、R(0 x65),CHARSET(CHAR(0 x65 USING utf8);+-+-+I CHARSET(CHAR(0 x65)|CHARSET(CHAR(0 x65 USING utf8)|+-+-+I binary|utf8|+-+-+如果USING已经产生,而结果字符审不符合给出的字符集,则会发出警告。同样,如果严格的SQL模式被激活,则CHAR0的结果会成为NULLoCHAR_LENGTH(str)返回值为字符审str的长度,长度的单位为字符。一个多字节字符算作 一个单字符。对于一个包含五个二字节字符集,LENGTH。返回值为10,而CHAR_LENGTH()的返回值为5。CHAR
33、ACTER_LENGTH(str)CHARACTER_LENGTH()是 CHAR_LENGTH()的同义词。COMPRESS(str/ng_t-o_compress)压缩一个字符串。这个函数要求MySQL已经用一个诸如zlib的压缩库压 缩过。否则,返回值始终是NULL。UNCOMPRESS()可将压缩过的字符 审进行解压缩。mysql SELECT LENGTH(COMPRESS(REPEAT(,a,,1000);-21mysql SELECT LENGTH(COMPRESSC);-0mysql SELECT LENGTH(COMPRESSC a);-13mysql SELECT LENG
34、TH(COMPRESS(REPEAT C a,16);-15压缩后的字符审的内容按照以下方式存储:o空字符串按照空字符串存储。o非空字符串未压缩字符串的四字节长度进行存储(首先为低字节),后面是压 缩字符串。如果字符串以空格结尾,就会在后加一个口号,以防止当结果值 是存储在CHAR或VARCHAR类型的字段列时,出现自动把结尾空格去掉的现 象。(不推荐使用CHAR或VARCHAR来存储压缩字符串。最好使用一个 BLOB列代替)。CONCAT(5t”,5tr2,.)返回结果为连接参数产生的字符审。如有任何一个参数为NULL,则返 何值为NULLO或许有一个或多个参数。如果所有参数均为非二进制字符
35、 串,则结果为非二进制字符串。如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字 符串格式;若要避免这种情况,可使用显式类型cast,例如:SELECT CONCAT(CAST(int_col AS CHAR),char_col)mysql SELECT CONCAT(My,S,QL);-MySQLmysql SELECT CONCATC My,NULL,QL);-NULL mysql SELECT CONCAT(14.3);-14.3CO N C/y/S(separator,strl,str2,.)C0NCAT_WS()代表 CONCAT Wi
36、th Separator,是 CONCAT()的特殊形 式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两 个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔 符为NULL,则结果为NULLo函数会忽略任何分隔符参数后的NULL值。mysql SELECT C0NCAT_WSFirst name,Second name,,Last Name,);-First name,Second name,Last Namemysql SELECT C0NCAT_WS First name,NULL,Last Name,);-,First name,Last NameC0NCAT_W
37、S()不会忽略任何空字符审。(然而会忽略所有的NULL)oCONV(N,from_base,to_base)不同数基间转换数字。返回值为数字的字符审表示,由fsbase基我 化为方加se基。如有任意一个参数为NULL,则返回值为NULLo自变 量N被理解为一个整数,但是可以被指定为一个整数或字符串。最小基 数为2,而最大基数则为36O If to_base是一个负数,则N被看作 一个带符号数。否则,被看作无符号数。C0NV0的运行精确度为64 比特。mysql SELECT CONVC a,16,2);-1010mysql SELECT CONVC 6E,18,8);-172mysql SEL
38、ECT C0NV(-17,10,-18);-Hmysql SELECT C0NV(10+,10,10,+0 xa,10,10);-40E LT(N,strl,str2,str3,.)若二1,则返回值为strl,去N=2,则返回值为str2,以此类 推。若小于1或大于参数的数目,则返回值为NULL o ELTO 是FIELD。的补数。mysql SELECT ELT(1,ej,Heja,hej,foo);-ej,mysql SELECT ELT(4,,e j,,,Heja,,he j,,foo);-fooEXPOKT_SET(bits,on,off,separator,number_of_bit
39、s)返回值为一个字符审,其中对于小工s值中的每个位组,可以得到一个on 字符串,而对于每个清零比特位,可以得到一个字符串。bits中的 比特值按照从右到左的顺序接受检验(由低位比特到高位比特)。字符串 被分隔字符串分开(默认为逗号,),按照从左到右的顺序被添加到结 果中。77加?空0匚41s会给出被检验的二进制位数(默认为64)omysql SELECT EXPORT_SET(5,Y,N,4);-Y,N,Y,Nmysql SELECT EXP0RT_SET(6,1,O,10);-0,1,1,0,0,0,0,0,0,OFI EL.D(str,strl,str2,str3,.)返回值为strl,s
40、tr2,str3,.列表中的str指数。在找不到str的情况下,返回值为0。如果所有对于FIELD。的参数均为字符串,则所有参数均按照字符串进 行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数按 照双倍进行比较。如果s5为NULL,则返回值为0,原因是NULL不能同任何值进行同等 比较。FIELD 0是ELT()的补数。mysql SELECT FIELD(ej,He j,ej,He ja,he j,foo);-2 mysql SELECT FIELD(fo,Hej,,ej,,J He ja,he j,foo);-0FIND_IN_SET(str,str/st)假如字符串str在
41、由N子链组成的字符串列表strlist中,则返回值 的范围在1到N之间。一个字符串列表就是一个由一些被,符号分 开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是 type SET列,则 FIND_IN_SET()函数被优化,使用比特计算。如果str 不在strlist或strlist为空字符串,则返回值为0。如任意一个参数 为NULL,则返回值为NULLo这个函数在第一个参数包含一个逗号(,)时将无法正常运行。mysql SELECT FIND_IN_SET(,b,a,b,c,d);-2FORMAT(X,D)将number才设置为格式以四舍五入的方式保留到小 数点后位,而返回结
42、果为一个字符串。详见12.9.4节,其他函数HEX(/V_oc5)如果也07LS是一个数字,则返回一个 十六进制值的字符审表示,在这里,N 是一个 longlong(BIGINT)数。这相当于 C0NV(N,10,16)o如果Kfl/LS是一个字符审,则返回值为一个叫S的十六进制字符串 表示,其中每个N_0R_S里的每个字符被转化为两个十六进制数字。mysql SELECT HEX(255);-,FF,mysql SELECT 0 x616263;-abcmysql SELECT HEX(abc);-616263IN S E RT(str,pos,len,newstr)返回字符审str,其子字
43、符审起始于pos位置和长期被字符审newstr 取代的len字符。如果夕os超过字符串长度,则返回值为原始字符串。假如的长度大于其它字符串的长度,则从位置夕。S开始替换。若任何 一个参数为null,则返回值为NULL。mysql SELECT INSERT(Quadratic,3,4,What);-QuWhatticmysql SELECT INSERT C Quadrat i c,,-1,4,What);-Quadratic5mysql SELECT INSERT C Quadrat i c,,3,100,What);-QuWhat这个函数支持多字节字元。STR(str,substr)返回字
44、符审str中子字符审的第一个出现位置。这和LOCATE。的双参数 形式相同,除非参数的顺序被颠倒。mysql SELECT INSTR(foobarbar,,bar,);-4mysql SELECT INSTR(J xbarJ,foobar,);-0这个函数支持多字节字元,并且只有当至少有一个参数是二进制字符审时 区分大小写。LCASE(str)LCASEO是LOWER。的同义词。LEFT(str,/en)返回从字符审str开始的len最左字符。mysql SELECT LEFTC foobarbar,,5);-fooba,LENGTH(str)返回值为字符串str的长度,单位为字节。一个多字
45、节字符算作多字节。这意味着 对于一个包含5个2字节字符的字符串,LENGTH()的返回值 为10,而CHAR_LENGTH()的返回值则为5。mysql SELECT LENGTH(text);-4LOAD_FILE(/7e_nczme)读取文件并将这一文件按照字符审的格式返回。文件的位置必须在服务 器上,你必须为文件制定路径全名,而且你还必须拥有FILE特许权。文 件必须可读取,文件容量必须小于max_anowed_packet字节。若文件不存在,或因不满足上述条件而不能被读取,则函数返回值为 NULLomysql UPDATE tbl_nameSET blob_column=zLQND_F
46、ILE(J/tmp/picture)WHERE id=l;LOCATE(substr,str),l.OCME(substr,str,pos)第一个语法返回字符审S5中子字符审S/S5的第一个出现位置。第二 个语法返回字符串S5中子字符串SS5的第一个出现位置,起始位置 在夕OS。如若不在str中,则返回值为0。mysql SELECT LOCATE(J bar,foobarbar,);-4mysql SELECT LOCATE(J xbar,foobarJ);-0mysql SELECT LOCATE(J bar,,foobarbar,,5);-7这个函数支持多字节字元,并且只有当至少有一个参
47、数是二进制字符串时 区分大小写。LOWER(str)返回字符串str以及所有根据最新的字符集映射表变为小写字母的字符(默认为 cpl252 Latinl)omysql SELECT LOWER(QUADRATICALLY);-,quadratically,这个函数支持多字节字元。l.PM)(str,len,padstr)返回字符审str,其左边由字符审padstr填补到len字符长度。假如 str的长度大于len,则返回值被缩短至len字符。mysql SELECT LPAD(,hi,4,?);-?himysql SELECT LPAD(,hi,1,?);-,hLTR IM(str)返回字符审
48、str,其引导空格字符被删除。mysql SELECT LTRIMC barbar);-barbar这个函数支持多字节字元。M AKE_SET(bgst fstr2,.)返回一个设定值(一个包含被,号分开的字字符审的字符审),由在 41s组中具有相应的比特的字符串组成。对应比特0,对应 比特1,以此类推。strl,str2,.中的NULL值不会被添加到结果中。mysql SELECT MAKE_SET(1,a,b,c);-,amysql SELECT MAKE_SET(1|4,helloniceworld);-,hello,world?mysql SELECT MAKE_SET(1|4,hel
49、lonice,NULL,world);-hellomysql SELECT MAKE_SET(0,a,b,c);-MD(str,pos,len)MID(sr,pos,len)是 SUBSTRING(szr,夕os,的同义词。OCT(/V)返回一个的八进制值的字符串表示,其中N是一个longlong(BIGINT)数。这等同于C0NV(N,10,8)o若N为NULL,则返回值为NULL。mysql SELECT OCT(12);-14OCTET_LENGTH(str)OCTET_LENGTH()是 LENGTH()的同义词。ORD(str)若字符审str的最左字符是一个多字节字符,则返回该字符的
50、代码,代 码的计算通过使用以下公式计算其组成字节的数值而得出:(1st byte code)+(2nd byte code X 256)+(3rd byte code X 2562).假如最左字符不是一个多字节字符,那么0RD()和函数ASCII。返回相同 的值。mysql SELECT 0RD(2);-50POSITION(substr IN 5mPOSITION substr IN s)是 LOCATE(s sir,sir)同义词。QUOTE(str)引证一个字符审,由此产生一个在SQL语句中可用作完全转义数据值的结 果。返回的字符审由单引号标注,每例都带有单引号(“)、反斜 线符号()、






