--摘自《SQL HACKS》 by claro ,in 西安 , select getdate() --2009-01-06 13:46:26.543
NULLIF是一个少为人知的函数,它在其参数相等时返回NULL。它是回避被零除例外的方便手段。
表达式NULLIF(X,Y)在x和y不同时返回x。如果x和y相同,则返回NULL。
假设你需要计算一对数的比值,但除数有可能为零,如表5-6所示。
表5-6 stats表
page impressions clicks
index.htm 1,000 10
page1.htm 0 0
page2.htm 500 10
要 计算每个页面的点进率(CTR),那么就用点击数(clicks)除以页面浏览数量(impressions),再乘上100。由于page1.htm处 于脱机状态,它的页面浏览量依然是零,因此,CTR计算将产生被零除错误。这个示例出自SQL Server(其他数据库给出类似错误):
select page , 100.0 * clicks / impressions from stats;
page
-------------------
index.htm
msg 8134, level 16,stste 1,server TINYVAIO, Line 1 Divide by zero error encountered.
MySQL不报错,它返回NULL来解决这个问题。
你能够使用NULLIF在浏览数量为零时生产NULL来解决这个问题:
select page , 100.0*clicks / NULLIF(impressions,0) from stats;
page
---------------------
index.htm 1.000000000000
page1.htm NULL
page2.htm 2.000000000000
在SQL中,任何数值被NULL出都得到NULL值,并且不产生错误。
IFNULL和ISNULL 和NULLIF
IFNULL是一个MySQL函数。它类似与COALESCE 和 NVL 。如果第一个参数不为NULL,那么IFNULL返回第一个函数,否则分会第二个参数。
ISNULL是另一个MySQL函数。当输入为NULL时,ISNULL返回1,否则返回0。
正如本文展示的那样,NULLIF是一个标准的SQL函数,所有主流SQL厂商都支持这个函数。
NULLIF是一个少为人知的函数,它在其参数相等时返回NULL。它是回避被零除例外的方便手段。
表达式NULLIF(X,Y)在x和y不同时返回x。如果x和y相同,则返回NULL。
假设你需要计算一对数的比值,但除数有可能为零,如表5-6所示。
表5-6 stats表
page impressions clicks
index.htm 1,000 10
page1.htm 0 0
page2.htm 500 10
要 计算每个页面的点进率(CTR),那么就用点击数(clicks)除以页面浏览数量(impressions),再乘上100。由于page1.htm处 于脱机状态,它的页面浏览量依然是零,因此,CTR计算将产生被零除错误。这个示例出自SQL Server(其他数据库给出类似错误):
select page , 100.0 * clicks / impressions from stats;
page
-------------------
index.htm
msg 8134, level 16,stste 1,server TINYVAIO, Line 1 Divide by zero error encountered.
MySQL不报错,它返回NULL来解决这个问题。
你能够使用NULLIF在浏览数量为零时生产NULL来解决这个问题:
select page , 100.0*clicks / NULLIF(impressions,0) from stats;
page
---------------------
index.htm 1.000000000000
page1.htm NULL
page2.htm 2.000000000000
在SQL中,任何数值被NULL出都得到NULL值,并且不产生错误。
IFNULL和ISNULL 和NULLIF
IFNULL是一个MySQL函数。它类似与COALESCE 和 NVL 。如果第一个参数不为NULL,那么IFNULL返回第一个函数,否则分会第二个参数。
ISNULL是另一个MySQL函数。当输入为NULL时,ISNULL返回1,否则返回0。
正如本文展示的那样,NULLIF是一个标准的SQL函数,所有主流SQL厂商都支持这个函数。