📄 06-3.html
字号:
<HTML>
<HEAD>
<TITLE>MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译</TITLE>
<style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<META name="description" content="MySQL 4.1.0 中文参考手册">
<META name="keywords" content="MySQL,4.1.0,Shuixin13,MySQL 4.1.0,中文,中文参考手册,犬犬(心帆)">
<LINK rel="shortcut icon" href="shuixin13.ico" />
<LINK href="images/index.css" type=text/css rel=STYLESHEET>
<SCRIPT language=javascript src="images/index.js"></SCRIPT>
<SCRIPT language=javascript><!--
x = new Date()
function cal() {
y = new Date()
diff = y.getTime() - x.getTime()
document.write("载入时间 " + diff/1000 + " 秒")
}
//--></SCRIPT>
<SCRIPT language=JavaScript>
var currentpos,timer;
function initialize()
{
timer=setInterval("scrollwindow()",10);
}
function sc()
{
clearInterval(timer);
}
function scrollwindow()
{
currentpos=document.body.scrollTop;
window.scroll(0,++currentpos);
if (currentpos != document.body.scrollTop)
sc();
}
document.onmousedown=sc
document.ondblclick=initialize
</SCRIPT>
</HEAD>
<BODY BGCOLOR=#efefff TEXT=#000000 LINK=#101090 VLINK=#7030B0>
<H1>MySQL Reference Manual for version 4.1.0-alpha.</H1>
<P>
<P><HR>
<H2><A NAME="Functions"></A>6.3 用于 <CODE>SELECT</CODE> 和 <CODE>WHERE</CODE> 子句的函数</H2>
<P> 一个 SQL 语句中的 <CODE>select_expression</CODE> 或 <CODE>where_definition</CODE>
可由任何使用了下面所描述函数的表达式组成。 </P>
<P>
包含 <CODE>NULL</CODE> 的表达式总是得出一个 <CODE>NULL</CODE> 值结果,除非表达式中的操作和函数在文档中有另外的说明。
</P>
<P>
<STRONG>注意:</STRONG>在一个函数名和跟随它的括号之间必须不存在空格。这有助于 MySQL 语法分析程序区分函数调用和对恰巧与函数同名表或列的引用。然而,参数左右两边的空格却是允许的。
</P>
<P>
你可以强制 MySQL 接受函数名后存在空格的形式,这需要通过以 <CODE>--ansi</CODE> 选项启动 <CODE>mysqld</CODE>,或在 <CODE>mysql_connect()</CODE> 中使用 <CODE>CLIENT_IGNORE_SPACE</CODE>,但是,在这种情况下,所有的函数名均将成为保留字。查看章节 <A HREF="manual1.html#ANSI_mode">1.8.2 以 ANSI 模式运行 MySQL</A>.
</P>
<P>
为了简洁,从 <CODE>mysql</CODE> 程序输出的例子以缩写的形式显示。因此:
</P>
<PRE>
mysql> SELECT MOD(29,9);
1 rows in set (0.00 sec)
+-----------+
| mod(29,9) |
+-----------+
| 2 |
+-----------+
</PRE>
<P>
将被显示为这样:
</P>
<PRE>
mysql> SELECT MOD(29,9);
-> 2
</PRE>
<H3><A NAME="Non-typed_Operators"></A>6.3.1 无类型的特殊运算符和函数</H3>
<H4><A NAME="Parentheses"></A>6.3.1.1 圆括号</H4>
<P> ( ... ) </P>
<P>
括号,使用它来强制一个表达式的计算顺序。
</P>
<PRE>
mysql> SELECT 1+2*3;
-> 7
mysql> SELECT (1+2)*3;
-> 9
</PRE>
<H4><A NAME="Comparison_Operators"></A>6.3.1.2 比较运算符</H4>
<P> 比较运算符的结果是 <CODE>1</CODE> (TRUE)、<CODE>0</CODE> (FALSE) 或 <CODE>NULL</CODE>。这些函数可工作于数字和字符串上。根据需要,字符串将会自动地被转换到数字,以及数字被转换成字符串(比如在
Perl 中)。 </P>
<P>
MySQL 使用下列规则进行比较:
</P>
<UL>
<LI>
如果一个或两个参数是 <CODE>NULL</CODE>,比较的结果是 <CODE>NULL</CODE>,除了 <CODE><=></CODE> 运算符。
<LI>
如果在一个比较操作中两个参数均是字符串,他们将作为字符串被比较。
<LI>
如果两个参数均是整数,他们作为整数被比较。
<LI>
十六进制值如果不与一个数字进行比较,那么它将当作一个二进制字符串。
<LI> 如果参数之一是一个 <CODE>TIMESTAMP</CODE> 或 <CODE>DATETIME</CODE> 列,而另一参数是一个常数,在比较执行之前,这个常数被转换为一个时间戳。这样做是为了对
ODBC 更友好。
<LI>
在所有其它情况下,参数作为浮点(real)数字被比较。
</UL>
<P>
缺省地,字符串使用当前字符集以忽略字母大小写的方式进行比较(缺省的字符集为 ISO-8859-1 Latin1,它对英语处理得很出色)。
</P>
<P>
下面的例子演示了对于比较操作字符串到数字的转换:
</P>
<PRE>
mysql> SELECT 1 > '6x';
-> 0
mysql> SELECT 7 > '6x';
-> 1
mysql> SELECT 0 > 'x6';
-> 0
mysql> SELECT 0 = 'x6';
-> 1
</PRE>
<DL COMPACT>
<DT><CODE>=</CODE>
<DD>
<A NAME="IDX1115"></A>
<A NAME="IDX1116"></A>
等于:
<PRE>
mysql> SELECT 1 = 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
</PRE>
<A NAME="IDX1117"></A>
<A NAME="IDX1118"></A>
<A NAME="IDX1119"></A>
<A NAME="IDX1120"></A>
<DT><CODE><></CODE>
<DD>
<DT><CODE>!=</CODE>
<DD>
不等于:
<PRE>
mysql> SELECT '.01' <> '0.01';
-> 1
mysql> SELECT .01 <> '0.01';
-> 0
mysql> SELECT 'zapp' <> 'zappp';
-> 1
</PRE>
<A NAME="IDX1121"></A>
<A NAME="IDX1122"></A>
<DT><CODE><=</CODE>
<DD>
小于或等于:
<PRE>
mysql> SELECT 0.1 <= 2;
-> 1
</PRE>
<A NAME="IDX1123"></A>
<A NAME="IDX1124"></A>
<DT><CODE><</CODE>
<DD>
小于:
<PRE>
mysql> SELECT 2 < 2;
-> 0
</PRE>
<A NAME="IDX1125"></A>
<A NAME="IDX1126"></A>
<DT><CODE>>=</CODE>
<DD>
大于或等于:
<PRE>
mysql> SELECT 2 >= 2;
-> 1
</PRE>
<A NAME="IDX1127"></A>
<A NAME="IDX1128"></A>
<DT><CODE>></CODE>
<DD>
大于:
<PRE>
mysql> SELECT 2 > 2;
-> 0
</PRE>
<A NAME="IDX1129"></A>
<A NAME="IDX1130"></A>
<DT><CODE><=></CODE>
<DD>
NULL 值安全等于:
<PRE>
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1 1 0
</PRE>
<A NAME="IDX1131"></A>
<A NAME="IDX1132"></A>
<A NAME="IDX1133"></A>
<DT><CODE>IS NULL</CODE>
<DD>
<DT><CODE>IS NOT NULL</CODE>
<DD>
测试一个值是或不是 <CODE>NULL</CODE>:
<PRE>
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
-> 0 0 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
-> 1 1 0
</PRE>
<A NAME="IDX1134"></A>
<A NAME="IDX1135"></A>
为了能够与其它程序更好的工作,在使用 <CODE>IS NULL</CODE> 是 MySQL 支持下列额外选择性:
<UL>
<LI>
通过它,你可以找到最后插入的记录行:
<PRE>
SELECT * FROM tbl_name WHERE auto_col IS NULL
</PRE>
这个操作可以通过设置 <CODE>SQL_AUTO_IS_NULL=0</CODE> 来禁止。查看章节 <A HREF="manual.html#SET_OPTION">5.5.6 <CODE>SET</CODE> 句法</A>.
<LI>
对于 <CODE>NOT NULL</CODE> 的 <CODE>DATE</CODE> 和 <CODE>DATETIME</CODE> 列,可以通过使用下列语句找到特殊的值 <CODE>0000-00-00</CODE>:
<PRE>
SELECT * FROM tbl_name WHERE date_column IS NULL
</PRE>
这需要通过某些 ODBC 应用程序才能工作(因为 ODBC 不支持一个 <CODE>0000-00-00</CODE> 日期)
</UL>
<P></P>
<A NAME="IDX1136"></A>
<DT><CODE>expr BETWEEN min AND max</CODE>
<DD>
如果 <CODE>expr</CODE> 大于或等于 <CODE>min</CODE> ,并且 <CODE>expr</CODE> 小于或等于 <CODE>max</CODE>,<CODE>BETWEEN</CODE> 返回 <CODE>1</CODE>,否则返回 <CODE>0</CODE>。它等价于表达式 <CODE>(min <= expr AND expr <= max)</CODE> ,只要所有的参数均是相同的类型。 否则类型会依照上面的规则发生转换,但是应用于所有三个参数。<STRONG>注意</STRONG>,在 MySQL 4.0.5 之前,参数被转换到 <CODE>expr</CODE> 的类型。
<PRE>
mysql> SELECT 1 BETWEEN 2 AND 3;
-> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
-> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
-> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
-> 0
</PRE>
<A NAME="IDX1137"></A>
<DT><CODE>expr NOT BETWEEN min AND max</CODE>
<DD>
等同于 <CODE>NOT (expr BETWEEN min AND max)</CODE>。
<P></P>
<A NAME="IDX1138"></A>
<DT><CODE>expr IN (value,...)</CODE>
<DD>
如果 <CODE>expr</CODE> 是 <CODE>IN</CODE> 列表中的作一值,它将返回 <CODE>1</CODE>,否则返回 <CODE>0</CODE>。如果所有的值均是常数,那么所有的值被依照 <CODE>expr</CODE> 的类型进行计算和排序。然后以一个二进制搜索方式完成项目的搜索。这就意味着,如果 <CODE>IN</CODE> 列表完全由常数组成,<CODE>IN</CODE> 将是非常快的。如果 <CODE>expr</CODE> 是一个字母大小写敏感的字符串表达式,字符串比较将以大小写敏感方式执行:
<PRE>
mysql> SELECT 2 IN (0,3,5,'wefwf');
-> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
-> 1
</PRE>
从 MySQL 4.1 开始(符合 SQL-99 标准),如果左手边的表达式是 <CODE>NULL</CODE>,或者在列表中没有发现相匹配的值并且列表中的一个表达式是 <CODE>NULL</CODE>,<CODE>IN</CODE> 均返回 <CODE>NULL</CODE>。
<P></P>
<A NAME="IDX1139"></A>
<DT><CODE>expr NOT IN (value,...)</CODE>
<DD>
等同于 <CODE>NOT (expr IN (value,...))</CODE>。
<P></P>
<A NAME="IDX1140"></A>
<DT><CODE>ISNULL(expr)</CODE>
<DD>
如果 <CODE>expr</CODE> 是 <CODE>NULL</CODE>,<CODE>ISNULL()</CODE> 返回 <CODE>1</CODE>,否则返回 <CODE>0</CODE>:
<PRE>
mysql> SELECT ISNULL(1+1);
-> 0
mysql> SELECT ISNULL(1/0);
-> 1
</PRE>
注意,对 <CODE>NULL</CODE> 值使用 <CODE>=</CODE> 进行比较总是为 false !
<A NAME="IDX1141"></A>
<A NAME="IDX1142"></A>
<DT><CODE>COALESCE(list)</CODE>
<DD>
返回列表中第一个非 <CODE>NULL</CODE> 的元素:
<PRE>
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
</PRE>
<A NAME="IDX1143"></A>
<DT><CODE>INTERVAL(N,N1,N2,N3,...)</CODE>
<DD>
如果 <CODE>N</CODE> < <CODE>N1</CODE> 返回 <CODE>0</CODE>,如果 <CODE>N</CODE> < <CODE>N2</CODE> 返回 <CODE>1</CODE>,等等。所有的参数均被当作整数。为了函数能正确地工作,它要求 <CODE>N1</CODE> < <CODE>N2</CODE> < <CODE>N3</CODE> < <CODE>...</CODE> < <CODE>Nn</CODE>。这是因为它使用的是一个二进制的搜索(非常地快):
<PRE>
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
-> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
-> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
-> 0
</PRE>
</DL>
<P>
如果以任何一个标准运算符(<CODE>=</CODE>, <CODE><></CODE>..., 但除了 <CODE>LIKE</CODE>)对一个忽略大小写的字符串进行比较,尾部的空白空间(空格、TAB 和换行)均被忽略。
</P>
<PRE>
mysql> SELECT "a" ="A \n";
-> 1
</PRE>
<H4><A NAME="Logical_Operators"></A>6.3.1.3 逻辑运算符</H4>
<P>
<A NAME="IDX1144"></A>
<A NAME="IDX1145"></A>
</P>
<P> 在 SQL 中,所有的逻辑运算符返回的值均为 TRUE、FALSE 或 NULL (未知)。在 MySQL 中,它们由 <CODE>1</CODE>
(TRUE)、<CODE>0</CODE> (FALSE) 和 <CODE>NULL</CODE> 实现。这些大部分在不同的 SQL 数据库间是相同的,然而某些可能会以一个非零值返回
TRUE。</P>
<DL COMPACT>
<DT><CODE>NOT</CODE>
<DD>
<A NAME="IDX1146"></A>
<A NAME="IDX1147"></A>
<DT><CODE>!</CODE>
<DD>
逻辑非。
如果操作数为 <CODE>0</CODE>,返回 <CODE>1</CODE>;如果操作数为非零,返回 <CODE>0</CODE>;如果操作数为 <CODE>NOT NULL</CODE>,返回 <CODE>NULL</CODE>。
<PRE>
mysql> SELECT NOT 10;
-> 0
mysql> SELECT NOT 0;
-> 1
mysql> SELECT NOT NULL;
-> NULL
mysql> SELECT ! (1+1);
-> 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -