⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 06-3.html

📁 MySQL4.1.0 中文参考手册
💻 HTML
📖 第 1 页 / 共 5 页
字号:
如果将一个二进制字符串作为参数传递给一个字符串函数,结果返回也是一个二进制字符串。一个数字被转换到字符串,该字符串被视为是一个二进制字符串。这仅仅会影响结果。
</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&#62; SELECT 'David!' LIKE 'David_';
        -&#62; 1
mysql&#62; SELECT 'David!' LIKE '%D%v%';
        -&#62; 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&#62; SELECT 'David!' LIKE 'David\_';
        -&#62; 0
mysql&#62; SELECT 'David_' LIKE 'David\_';
        -&#62; 1
</PRE>

为了指定一个不同的转义字符,可以使用 <CODE>ESCAPE</CODE> 子句:

<PRE>
mysql&#62; SELECT 'David_' LIKE 'David|_' ESCAPE '|';
        -&#62; 1
</PRE>

下面两个语句表明,字符串比较是忽略大小写的,除非任一操作数是一个二进制字符串:

<PRE>
mysql&#62; SELECT 'abc' LIKE 'ABC';
        -&#62; 1
mysql&#62; SELECT 'abc' LIKE BINARY 'ABC';
        -&#62; 0
</PRE>

<CODE>LIKE</CODE> 允许用在一个数字表达式上。(这是 MySQL 对 ANSI SQL <CODE>LIKE</CODE> 的扩展。)

<PRE>
mysql&#62; SELECT 10 LIKE '1%';
        -&#62; 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&#62; SELECT 'Monty!' REGEXP 'm%y%%';
        -&#62; 0
mysql&#62; SELECT 'Monty!' REGEXP '.*';
        -&#62; 1
mysql&#62; SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
        -&#62; 1
mysql&#62; SELECT "a" REGEXP "A", "a" REGEXP BINARY "A";
        -&#62; 1  0
mysql&#62; SELECT "a" REGEXP "^[a-d]";
        -&#62; 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&#62; SELECT STRCMP('text', 'text2');
        -&#62; -1
mysql&#62; SELECT STRCMP('text2', 'text');
        -&#62; 1
mysql&#62; SELECT STRCMP('text', 'text');
        -&#62; 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&#62; SELECT "a" = "A";
        -&#62; 1
mysql&#62; SELECT BINARY "a" = "A";
        -&#62; 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&#62; SELECT 3+5;
        -&#62; 8
</PRE>

<A NAME="IDX1232"></A>
<A NAME="IDX1233"></A>
<DT><CODE>-</CODE>
<DD>
减法:

<PRE>
mysql&#62; SELECT 3-5;
        -&#62; -2
</PRE>

<A NAME="IDX1234"></A>
<A NAME="IDX1235"></A>
<DT><CODE>*</CODE>
<DD>
乘法:

<PRE>
mysql&#62; SELECT 3*5;
        -&#62; 15
mysql&#62; SELECT 18014398509481984*18014398509481984.0;
        -&#62; 324518553658426726783156020576256.0
mysql&#62; SELECT 18014398509481984*18014398509481984;
        -&#62; 0
</PRE>

最后一个表达式的结果是错误的,这是因为乘法结果超过了 64 位 <CODE>BIGINT</CODE> 计算范围。

<A NAME="IDX1236"></A>
<A NAME="IDX1237"></A>
<DT><CODE>/</CODE>
<DD>
除法:

<PRE>
mysql&#62; SELECT 3/5;
        -&#62; 0.60
</PRE>

被 0 除将返回一个 <CODE>NULL</CODE> 结果:

<PRE>
mysql&#62; SELECT 102/(1-1);
        -&#62; 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&#62; SELECT - 2;
        -&#62; -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&#62; SELECT ABS(2);
        -&#62; 2
mysql&#62; SELECT ABS(-32);
        -&#62; 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&#62; SELECT SIGN(-32);
        -&#62; -1
mysql&#62; SELECT SIGN(0);
        -&#62; 0
mysql&#62; SELECT SIGN(234);
        -&#62; 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&#62; SELECT MOD(234, 10);
        -&#62; 4
mysql&#62; SELECT 253 % 7;
        -&#62; 1
mysql&#62; SELECT MOD(29,9);
        -&#62; 2
mysql&#62; SELECT 29 MOD 9;
        -&#62; 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&#62; SELECT FLOOR(1.23);
        -&#62; 1
mysql&#62; SELECT FLOOR(-1.23);
        -&#62; -2
</PRE>

注意,返回值被转换为一个 <CODE>BIGINT</CODE>!

<P></P>

<A NAME="IDX1249"></A>
<DT><CODE>CEILING(X)</CODE>
<DD>
返回不小于 <CODE>X</CODE> 的最小整数:

<PRE>
mysql&#62; SELECT CEILING(1.23);
        -&#62; 2
mysql&#62; SELECT CEILING(-1.23);
        -&#62; -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&#62; SELECT ROUND(-1.23);
        -&#62; -1
mysql&#62; SELECT ROUND(-1.58);
        -&#62; -2
mysql&#62; SELECT ROUND(1.58);
        -&#62; 2
mysql&#62; SELECT ROUND(1.298, 1);
        -&#62; 1.3
mysql&#62; SELECT ROUND(1.298, 0);
        -&#62; 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -