3 用于 SELECT 和 WHERE 子句的函数
一个 SQL 语句中的 select_expression 或 where_definition 可由任何使用了下面所描述函数的表达式组成。
包含 NULL 的表达式总是得出一个 NULL 值结果,除非表达式中的操作和函数在文档中有另外的说明。
注意:在一个函数名和跟随它的括号之间必须不存在空格。这有助于 MySQL 语法分析程序区分函数调用和对恰巧与函数同名表或列的引用。然而,参数左右两边的空格却是允许的。
你可以强制 MySQL 接受函数名后存在空格的形式,这需要通过以 --ansi 选项启动 mysqld,或在 mysql_connect() 中使用 CLIENT_IGNORE_SPACE,但是,在这种情况下,所有的函数名均将成为保留字。查看章节 1.8.2 以 ANSI 模式运行 MySQL.
为了简洁,从 mysql 程序输出的例子以缩写的形式显示。因此: mysql> SELECT MOD(29,9);
1 rows in set (0.00 sec)
+-----------+
| mod(29,9) |
+-----------+
| 2 |
+-----------+
将被显示为这样: mysql> SELECT MOD(29,9);
-> 2
3.1 无类型的特殊运算符和函数
3.1.1 圆括号
( ... )
括号,使用它来强制一个表达式的计算顺序。 mysql> SELECT 1+2*3;
-> 7
mysql> SELECT (1+2)*3;
-> 9
3.1.2 比较运算符
比较运算符的结果是 1 (TRUE)、0 (FALSE) 或 NULL。这些函数可工作于数字和字符串上。根据需要,字符串将会自动地被转换到数字,以及数字被转换成字符串(比如在 Perl 中)。
MySQL 使用下列规则进行比较:
- 如果一个或两个参数是
NULL,比较的结果是 NULL,除了 <=> 运算符。
- 如果在一个比较操作中两个参数均是字符串,他们将作为字符串被比较。
- 如果两个参数均是整数,他们作为整数被比较。
- 十六进制值如果不与一个数字进行比较,那么它将当作一个二进制字符串。
- 如果参数之一是一个
TIMESTAMP 或 DATETIME 列,而另一参数是一个常数,在比较执行之前,这个常数被转换为一个时间戳。这样做是为了对 ODBC 更友好。
- 在所有其它情况下,参数作为浮点(real)数字被比较。
缺省地,字符串使用当前字符集以忽略字母大小写的方式进行比较(缺省的字符集为 ISO-8859-1 Latin1,它对英语处理得很出色)。
下面的例子演示了对于比较操作字符串到数字的转换: mysql> SELECT 1 > '6x';
-> 0
mysql> SELECT 7 > '6x';
-> 1
mysql> SELECT 0 > 'x6';
-> 0
mysql> SELECT 0 = 'x6';
-> 1
=
- 等于:
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
<>
-
!=
- 不等于:
mysql> SELECT '.01' <> '0.01';
-> 1
mysql> SELECT .01 <> '0.01';
-> 0
mysql> SELECT 'zapp' <> 'zappp';
-> 1
<=
- 小于或等于:
mysql> SELECT 0.1 <= 2;
-> 1
<
- 小于:
mysql> SELECT 2 < 2;
-> 0
>=
- 大于或等于:
mysql> SELECT 2 >= 2;
-> 1
>
- 大于:
mysql> SELECT 2 > 2;
-> 0
<=>
- NULL 值安全等于:
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1 1 0
IS NULL
-
IS NOT NULL
- 测试一个值是或不是
NULL: 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
为了能够与其它程序更好的工作,在使用 IS NULL 是 MySQL 支持下列额外选择性:
expr BETWEEN min AND max
- 如果
expr 大于或等于 min ,并且 expr 小于或等于 max,BETWEEN 返回 1,否则返回 0。它等价于表达式 (min <= expr AND expr <= max) ,只要所有的参数均是相同的类型。 否则类型会依照上面的规则发生转换,但是应用于所有三个参数。注意,在 MySQL 4.0.5 之前,参数被转换到 expr 的类型。 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
expr NOT BETWEEN min AND max
- 等同于
NOT (expr BETWEEN min AND max)。
expr IN (value,...)
- 如果
expr 是 IN 列表中的作一值,它将返回 1,否则返回 0。如果所有的值均是常数,那么所有的值被依照 expr 的类型进行计算和排序。然后以一个二进制搜索方式完成项目的搜索。这就意味着,如果 IN 列表完全由常数组成,IN 将是非常快的。如果 expr 是一个字母大小写敏感的字符串表达式,字符串比较将以大小写敏感方式执行: mysql> SELECT 2 IN (0,3,5,'wefwf');
-> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
-> 1
从 MySQL 4.1 开始(符合 SQL-99 标准),如果左手边的表达式是 NULL,或者在列表中没有发现相匹配的值并且列表中的一个表达式是 NULL,IN 均返回 NULL。
expr NOT IN (value,...)
- 等同于
NOT (expr IN (value,...))。
ISNULL(expr)
- 如果
expr 是 NULL,ISNULL() 返回 1,否则返回 0: mysql> SELECT ISNULL(1+1);
-> 0
mysql> SELECT ISNULL(1/0);
-> 1
注意,对 NULL 值使用 = 进行比较总是为 false !
COALESCE(list)
- 返回列表中第一个非
NULL 的元素: mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
INTERVAL(N,N1,N2,N3,...)
- Returns 如果
N < N1 返回 0,如果 N < N2 返回 1,等等。所有的参数均被当作整数?a href="http://www.xxlinux.com/">Linux联盟收集整理
 |
频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。
| 原始作者:佚名 |
录入时间:2007-1-3 3:14:46 |
| 信息来源:不详 |
投稿信箱:itqoo@126.com |
|
|
 |
|