📄 06-3.html
字号:
如果将一个二进制字符串作为参数传递给一个字符串函数,结果返回也是一个二进制字符串。一个数字被转换到字符串,该字符串被视为是一个二进制字符串。这仅仅会影响结果。
</P>
<P>
<A NAME="IDX1211"></A>
<A NAME="IDX1212"></A>
</P>
<P>
通常,只要字符串比较中的任何一个表达式是区分大小写的,比较就会以字母大小写敏感方式执行。
</P>
<DL COMPACT>
<DT><CODE>expr LIKE pat [ESCAPE 'escape-char']</CODE>
<DD>
<A NAME="IDX1213"></A>
使用 SQL 的简单的正规表达式进行比较的模式匹配。返回 <CODE>1</CODE> (TRUE) 或 <CODE>0</CODE> (FALSE)。可以在模式中使用下面所示的两个通配符字符与 <CODE>LIKE</CODE> 配合:
<TABLE BORDER WIDTH="90%">
<TR><TD><STRONG>字符 </STRONG> </TD><TD> <STRONG>含义</STRONG>
</TD></TR>
<TR><TD><CODE>%</CODE> </TD><TD> 匹配任意多个字符,甚至是零个字符
</TD></TR>
<TR><TD><CODE>_</CODE> </TD><TD> 严格地匹配一个字符
</TD></TR>
</TABLE>
<PRE>
mysql> SELECT 'David!' LIKE 'David_';
-> 1
mysql> SELECT 'David!' LIKE '%D%v%';
-> 1
</PRE>
为了测试一个含有通配符的文字实例,可以用转义符加在能配符前。如果没有明确指定 <CODE>ESCAPE</CODE> 字符,假定为 <SAMP>“\”</SAMP>:
<TABLE BORDER WIDTH="90%">
<TR><TD><STRONG>字符串 </STRONG> </TD><TD> <STRONG>含义 </STRONG>
</TD></TR>
<TR><TD><CODE>\%</CODE> </TD><TD> 匹配一个 <CODE>%</CODE> 字符
</TD></TR>
<TR><TD><CODE>\_</CODE> </TD><TD> 匹配一个 <CODE>_</CODE> 字符
</TD></TR>
</TABLE>
<PRE>
mysql> SELECT 'David!' LIKE 'David\_';
-> 0
mysql> SELECT 'David_' LIKE 'David\_';
-> 1
</PRE>
为了指定一个不同的转义字符,可以使用 <CODE>ESCAPE</CODE> 子句:
<PRE>
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
</PRE>
下面两个语句表明,字符串比较是忽略大小写的,除非任一操作数是一个二进制字符串:
<PRE>
mysql> SELECT 'abc' LIKE 'ABC';
-> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
-> 0
</PRE>
<CODE>LIKE</CODE> 允许用在一个数字表达式上。(这是 MySQL 对 ANSI SQL <CODE>LIKE</CODE> 的扩展。)
<PRE>
mysql> SELECT 10 LIKE '1%';
-> 1
</PRE>
注意:因为 MySQL 在字符串中使用的是 C 的转义句法(例如 <SAMP>“\n”</SAMP>),所以在 <CODE>LIKE</CODE> 字符串中使用的任何一个 <SAMP>“\”</SAMP> 必须被双写。例如,为了查找 <SAMP>“\n”</SAMP>,必须以 <SAMP>“\\n”</SAMP> 形式指定它。为了查找 <SAMP>“\”</SAMP>,必须指定它为 <SAMP>“\\\\”</SAMP> (反斜线被语法分析器剥离一次,另一次在模式匹配时完成,留下一条单独的反斜线被匹配)。
<P></P>
<A NAME="IDX1214"></A>
<DT><CODE>expr NOT LIKE pat [ESCAPE 'escape-char']</CODE>
<DD>
相同于 <CODE>NOT (expr LIKE pat [ESCAPE 'escape-char'])</CODE>。
<P></P>
<A NAME="IDX1215"></A>
<DT><CODE>expr SOUNDS LIKE expr</CODE>
<DD>
等同于 <CODE>SOUNDEX(expr)=SOUNDEX(expr)</CODE> (适用于 MySQL 4.1 或更新的版本)。
<A NAME="IDX1216"></A>
<A NAME="IDX1217"></A>
<A NAME="IDX1218"></A>
<A NAME="IDX1219"></A>
<P></P>
<DT><CODE>expr REGEXP pat</CODE>
<DD>
<DT><CODE>expr RLIKE pat</CODE>
<DD> 依照模式 <CODE>pat</CODE> 对字符串表达式 <CODE>expr</CODE> 执行一个模式比较。模式可以是一个扩展的正则表达式。查看章节
<A HREF="manual2.html#Regexp">G MySQL 正则表达式</A>。如果表达式 <CODE>expr</CODE> 匹配
<CODE>pat</CODE>,返回 <CODE>1</CODE>,否则返回 <CODE>0</CODE>。<CODE>RLIKE</CODE>
是 <CODE>REGEXP</CODE> 的同义词,它提供了与 <CODE>mSQL</CODE> 的兼容。注意:MySQL 在字符串中使用的是
C 的转义句法(例如 <SAMP>“\n”</SAMP>),所以在 <CODE>REGEXP</CODE> 字符串中使用的任何一个 <SAMP>“\”</SAMP>
必须被双写。在 MySQL 3.23.4 中,<CODE>REGEXP</CODE> 对于正常的(不是二进制)字符串是忽略大小写的:
<PRE>
mysql> SELECT 'Monty!' REGEXP 'm%y%%';
-> 0
mysql> SELECT 'Monty!' REGEXP '.*';
-> 1
mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
-> 1
mysql> SELECT "a" REGEXP "A", "a" REGEXP BINARY "A";
-> 1 0
mysql> SELECT "a" REGEXP "^[a-d]";
-> 1
</PRE>
当决定一个字符的类型时,<CODE>REGEXP</CODE> 和 <CODE>RLIKE</CODE> 使用当前使用的字符集(缺省为 ISO-8859-1 Latin1)。
<P></P>
<A NAME="IDX1220"></A>
<DT><CODE>expr NOT REGEXP pat</CODE>
<DD>
<DT><CODE>expr NOT RLIKE pat</CODE>
<DD>
等同于 <CODE>NOT (expr REGEXP pat)</CODE>。
<P></P>
<A NAME="IDX1221"></A>
<DT><CODE>STRCMP(expr1,expr2)</CODE>
<DD>
如果字符串是相同,<CODE>STRCMP()</CODE> 返回 <CODE>0</CODE>,如果第一个参数根据当前排序次序小于第二个参数,返回 <CODE>-1</CODE>,否则返回 <CODE>1</CODE>:
<PRE>
mysql> SELECT STRCMP('text', 'text2');
-> -1
mysql> SELECT STRCMP('text2', 'text');
-> 1
mysql> SELECT STRCMP('text', 'text');
-> 0
</PRE>
<P></P>
<A NAME="IDX1222"></A>
<DT><CODE>MATCH (col1,col2,...) AGAINST (expr)</CODE>
<DD>
<DT><CODE>MATCH (col1,col2,...) AGAINST (expr IN BOOLEAN MODE)</CODE>
<DD>
<CODE>MATCH ... AGAINST()</CODE> 用于全文搜索,返回在列 <CODE>(col1,col2,...)</CODE> 和查询 <CODE>expr</CODE> 之间文本的相关相似的尺度。相关性是一个正的浮点型数字。零相关性意味着不相似。<CODE>MATCH ... AGAINST()</CODE> 可用于 MySQL 3.23.23 或更新的版本中。<CODE>IN BOOLEAN MODE</CODE> 扩展在 MySQL 4.0.1 中被新加入。详细描述和使用范例,请查看 <A HREF="06-8.html#Fulltext_Search">6.8 MySQL 全文搜索</A>。
</DL>
<H4><A NAME="Case_Sensitivity_Operators"></A>6.3.2.2 字母大小写敏感性</H4>
<P>
<A NAME="IDX1223"></A>
</P>
<P>
<A NAME="IDX1224"></A>
<A NAME="IDX1225"></A>
</P>
<DL COMPACT>
<DT><CODE><CODE>BINARY</CODE></CODE>
<DD>
<A NAME="IDX1226"></A>
<CODE>BINARY</CODE> 操作符将跟在它后面的字符串强制作为一个二进制字符串。这可以很容易地强制一个列的比较以字母大小写敏感方式进行,即使该列没有定义为 <CODE>BINARY</CODE> 或 <CODE>BLOB</CODE>?
<PRE>
mysql> SELECT "a" = "A";
-> 1
mysql> SELECT BINARY "a" = "A";
-> 0
</PRE>
<CODE>BINARY string</CODE> 是 <CODE>CAST(string AS BINARY)</CODE> 的缩写。查看章节 <A HREF="06-3.html#Cast_Functions">6.3.5 Cast 函数</A>。<CODE>BINARY</CODE> 在 MySQL 3.23.0 中被加入。
注意,当将一个索引列强制为 <CODE>BINARY</CODE> 时,在某些语境中,MySQL 将不能有效地使用索引。
</DL>
<P>
如果希望对一个 blob 进行忽略字母大小的比较时,你通常可以在比较前将它转换到大写:
</P>
<PRE>
SELECT 'A' LIKE UPPER(blob_col) FROM table_name;
</PRE>
<P>
我们计划不久推出在不同字符集间的转化,以使字符串比较有更好的伸缩性。
</P>
<H3><A NAME="Numeric_Functions"></A>6.3.3 数字函数</H3>
<H4><A NAME="Arithmetic_functions"></A>6.3.3.1 算术运算</H4>
<P>
<A NAME="IDX1227"></A>
常用的算术操作符均是可用的。注意,如果两个参数均是整型,<SAMP>`-'</SAMP>, <SAMP>`+'</SAMP> 和 <SAMP>`*'</SAMP> 以 <CODE>BIGINT</CODE> (64 位)精度运算并返回结果!如果一个参数是一个无符号的整数,另一个参数也是一个整数,结果也将是一个无符号整数。查看章节 <A HREF="06-3.html#Cast_Functions">6.3.5 Cast 函数</A>。
</P>
<P>
<A NAME="IDX1228"></A>
<A NAME="IDX1229"></A>
<DL COMPACT>
<DT><CODE>+</CODE>
<DD>
<A NAME="IDX1230"></A>
<A NAME="IDX1231"></A>
加法:
<PRE>
mysql> SELECT 3+5;
-> 8
</PRE>
<A NAME="IDX1232"></A>
<A NAME="IDX1233"></A>
<DT><CODE>-</CODE>
<DD>
减法:
<PRE>
mysql> SELECT 3-5;
-> -2
</PRE>
<A NAME="IDX1234"></A>
<A NAME="IDX1235"></A>
<DT><CODE>*</CODE>
<DD>
乘法:
<PRE>
mysql> SELECT 3*5;
-> 15
mysql> SELECT 18014398509481984*18014398509481984.0;
-> 324518553658426726783156020576256.0
mysql> SELECT 18014398509481984*18014398509481984;
-> 0
</PRE>
最后一个表达式的结果是错误的,这是因为乘法结果超过了 64 位 <CODE>BIGINT</CODE> 计算范围。
<A NAME="IDX1236"></A>
<A NAME="IDX1237"></A>
<DT><CODE>/</CODE>
<DD>
除法:
<PRE>
mysql> SELECT 3/5;
-> 0.60
</PRE>
被 0 除将返回一个 <CODE>NULL</CODE> 结果:
<PRE>
mysql> SELECT 102/(1-1);
-> NULL
</PRE>
只有当在一个结果被转换到一个整数的语境中执行时,除法将会以 <CODE>BIGINT</CODE> 进行算术计算。
</DL>
<H4><A NAME="Mathematical_functions"></A>6.3.3.2 数学函数</H4>
<P>
所有的数学函数在发生错误的情况下,均返回 <CODE>NULL</CODE>。
</P>
<P>
<A NAME="IDX1238"></A>
<A NAME="IDX1239"></A>
</P>
<DL COMPACT>
<DT><CODE>-</CODE>
<DD>
<A NAME="IDX1240"></A>
<A NAME="IDX1241"></A>
<A NAME="IDX1242"></A>
一元减。 改变参数的符号:
<PRE>
mysql> SELECT - 2;
-> -2
</PRE>
注意,如果这个操作符被用于一个 <CODE>BIGINT</CODE>,返回值也是一个 <CODE>BIGINT</CODE>!这就意味着,应该避免在一个可能有值 <CODE>-2^63</CODE> 的整数上使用 <CODE>-</CODE> 操作符!
<P></P>
<A NAME="IDX1243"></A>
<DT><CODE>ABS(X)</CODE>
<DD>
返回 <CODE>X</CODE> 的绝对值:
<PRE>
mysql> SELECT ABS(2);
-> 2
mysql> SELECT ABS(-32);
-> 32
</PRE>
这个函数可安全地使用于 <CODE>BIGINT</CODE> 值。
<P></P>
<A NAME="IDX1244"></A>
<DT><CODE>SIGN(X)</CODE>
<DD>
以 <CODE>-1</CODE>、<CODE>0</CODE> 或 <CODE>1</CODE> 方式返回参数的符号,它取决于参数 <CODE>X</CODE> 是负数、0 或正数。
<PRE>
mysql> SELECT SIGN(-32);
-> -1
mysql> SELECT SIGN(0);
-> 0
mysql> SELECT SIGN(234);
-> 1
</PRE>
<A NAME="IDX1245"></A>
<A NAME="IDX1246"></A>
<A NAME="IDX1247"></A>
<DT><CODE>MOD(N,M)</CODE>
<DD>
<DT><CODE>%</CODE>
<DD>
取模 (就如 C 中的 <CODE>%</CODE> 操作符)。返回 <CODE>N</CODE> 被 <CODE>M</CODE> 除后的余数:
<PRE>
mysql> SELECT MOD(234, 10);
-> 4
mysql> SELECT 253 % 7;
-> 1
mysql> SELECT MOD(29,9);
-> 2
mysql> SELECT 29 MOD 9;
-> 2
</PRE>
这个函数可安全地使用于 <CODE>BIGINT</CODE> 值。最后一个示例可在 MySQL 4.1 中工作。
<P></P>
<A NAME="IDX1248"></A>
<DT><CODE>FLOOR(X)</CODE>
<DD>
返回不大于 <CODE>X</CODE> 的最大整数值:
<PRE>
mysql> SELECT FLOOR(1.23);
-> 1
mysql> SELECT FLOOR(-1.23);
-> -2
</PRE>
注意,返回值被转换为一个 <CODE>BIGINT</CODE>!
<P></P>
<A NAME="IDX1249"></A>
<DT><CODE>CEILING(X)</CODE>
<DD>
返回不小于 <CODE>X</CODE> 的最小整数:
<PRE>
mysql> SELECT CEILING(1.23);
-> 2
mysql> SELECT CEILING(-1.23);
-> -1
</PRE>
注意,返回值被转换为一个 <CODE>BIGINT</CODE>!
<P></P>
<A NAME="IDX1250"></A>
<DT><CODE>ROUND(X)</CODE>
<DD>
<DT><CODE>ROUND(X,D)</CODE>
<DD>
将参数 <CODE>X</CODE> 四舍五入到最近的整数,然后返回。
两个参数的形式是将一个数字四舍五入到 <CODE>D</CODE> 个小数后返回。
<PRE>
mysql> SELECT ROUND(-1.23);
-> -1
mysql> SELECT ROUND(-1.58);
-> -2
mysql> SELECT ROUND(1.58);
-> 2
mysql> SELECT ROUND(1.298, 1);
-> 1.3
mysql> SELECT ROUND(1.298, 0);
-> 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -