MySQL 4.1.0 中文参考手册 --- 6.3 用于 SELECT 和 WHERE 子句的函数 (1)[4]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 shuixin13 的 blog

ifnull(expr1,expr2)
如果 expr1 为非 null 的,ifnull() 返回 expr1,否则返回 expr2ifnull() 返回一个数字或字符串值,这取决于它被使用的语境:
mysql> select ifnull(1,0);
        -> 1
mysql> select ifnull(null,10);
        -> 10
mysql> select ifnull(1/0,10);
        -> 10
mysql> select ifnull(1/0,'yes');
        -> 'yes'
在 mysql 4.0.6 和更新版本中,ifnull(expr1,expr2) 的默认返回值以 stringrealinteger 顺序更加'general'了两个表达式。当你基于一个表达式创建一个表或在一个临时表中 mysql 不得不存储一个从 ifnull() 返回的值时,这个与较早 mysql 版本的不同将更加值得注意。
create table foo select ifnull(1,"test") as test;
在 mysql 4.0.6 中,列 'test' 的类型为 char(4),然而在较早的版本中,你得到的却是 bigint

nullif(expr1,expr2)
如果 expr1 = expr2 为真,返回 null,否则返回 expr1。 它等同于 case when x = y then null else x end
mysql> select nullif(1,1);
        -> null
mysql> select nullif(1,2);
        -> 1
注意,如果参数不相等,在 mysql 中,expr1 被求值两次。

if(expr1,expr2,expr3)
如果 expr1 为真(expr1 <> 0 以及 expr1 <> null),那么 if() 返回 expr2,否则返回 expr3if() 返回一个数字或字符串,这取决于它被使用的语境:
mysql> select if(1>2,2,3);
        -> 3
mysql> select if(1<2,'yes','no');
        -> 'yes'
mysql> select if(strcmp('test','test1'),'no','yes');
        -> 'no'
如果 expr2expr3 明确地为 null,那么函数 if() 的返回值类型为非 null 列的类型。(这在选择在 mysql 4.0.3 中新加入)。 expr1 是作为一个整数值被计算的,这就意味着,如果测试的是一个浮点型或字符串值,就必须进行比较操作:
mysql> select if(0.1,1,0);
        -> 0
mysql> select if(0.1<>0,1,0);
        -> 1
在上面第一种情况下,if(0.1) 返回 0,是因为 0.1 被转换为一个整数值,返回 if(0) 的测试结果。这可能不是你所期望的。在第二种情况下,比较测试原浮点数是否为一个非零值。比较的结果被作为整数使用。 缺省的 if() 返回值类型 (当结果存储在临时表中时,这是非常重要的) 在 mysql 3.23 中按下列方式确定:
表达式 返回值
表达式(expr2)或表达式(expr3)返回值为字符串 字符串
表达式(expr2)或表达式(expr3)返回值为浮点型值 浮点型
表达式(expr2)或表达式(expr3)返回值为整型 整型

本文关键:MySQL 4.1.0 中文
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top