设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> 数据库应用 >> Oracle >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
在MySQL 数据库中使用C …
Oracle与SQL Server之间…
将你的网站从MySQL改为P…
利用图形界面从SQL导入导…
教你如何编写高效的MySQ…
解析MySQL数据库是如何对…
从Oracle迁移到SQL Serv…
MySQL中文模糊检索问题的…
用SQL*Loader将Excel数据…
关于Oracle和SQL存储调试…
  MySQL语言参考(3) :SELECT和WHERE子句的函数         
MySQL语言参考(3) :SELECT和WHERE子句的函数
 

3 用于 SELECTWHERE 子句的函数

一个 SQL 语句中的 select_expressionwhere_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,除了 <=> 运算符。
  • 如果在一个比较操作中两个参数均是字符串,他们将作为字符串被比较。
  • 如果两个参数均是整数,他们作为整数被比较。
  • 十六进制值如果不与一个数字进行比较,那么它将当作一个二进制字符串。
  • 如果参数之一是一个 TIMESTAMPDATETIME 列,而另一参数是一个常数,在比较执行之前,这个常数被转换为一个时间戳。这样做是为了对 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 支持下列额外选择性:
  • 通过它,你可以找到最后插入的记录行:
    SELECT * FROM tbl_name WHERE auto_col IS NULL
    
    
    这个操作可以通过设置 SQL_AUTO_IS_NULL=0 来禁止。查看章节 5.5.6 SET 句法.
  • 对于 NOT NULLDATEDATETIME 列,可以通过使用下列语句找到特殊的值 0000-00-00
    SELECT * FROM tbl_name WHERE date_column IS NULL
    
    
    这需要通过某些 ODBC 应用程序才能工作(因为 ODBC 不支持一个 0000-00-00 日期)

expr BETWEEN min AND max
如果 expr 大于或等于 min ,并且 expr 小于或等于 maxBETWEEN 返回 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,...)
如果 exprIN 列表中的作一值,它将返回 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,或者在列表中没有发现相匹配的值并且列表中的一个表达式是 NULLIN 均返回 NULL

expr NOT IN (value,...)
等同于 NOT (expr IN (value,...))

ISNULL(expr)
如果 exprNULLISNULL() 返回 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
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持