mysql reference manual for version 4.1.0-alpha.
6.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
6.3.1 无类型的特殊运算符和函数
6.3.1.1 圆括号
( ... )
括号,使用它来强制一个表达式的计算顺序。
mysql> select 1+2*3;
-> 7
mysql> select (1+2)*3;
-> 9
6.3.1.2 比较运算符
比较运算符的结果是 1 (true)、0 (false) 或 null。这些函数可工作于数字和字符串上。根据需要,字符串将会自动地被转换到数字,以及数字被转换成字符串(比如在
perl 中)。
mysql 使用下列规则进行比较:
-
如果一个或两个参数是
null,比较的结果是null,除了<=>运算符。 - 如果在一个比较操作中两个参数均是字符串,他们将作为字符串被比较。
- 如果两个参数均是整数,他们作为整数被比较。
- 十六进制值如果不与一个数字进行比较,那么它将当作一个二进制字符串。
- 如果参数之一是一个
timestamp或datetime列,而另一参数是一个常数,在比较执行之前,这个常数被转换为一个时间戳。这样做是为了对 odbc 更友好。 - 在所有其它情况下,参数作为浮点(real)数字被比较。
缺省地,字符串使用当前字符集以忽略字母大小写的方式进行比较(缺省的字符集为 iso-8859-1 latin1,它对英语处理得很出色)。
下面的例子演示了对于比较操作字符串到数字的转换: