在哪里以及如何使用SQLITE的NULLIF(X,Y)函数?

时间:2013-11-01 06:29:51

标签: sqlite

我知道SQLITE的NULLIF(X,Y)函数相当于:

CASE
    WHEN
        X = Y
    THEN
        NULL
    ELSE
        X
END

和IFNULL(X,Y)功能相当于:

CASE
    WHEN
        X IS NULL
    THEN
        Y
    ELSE
        X
END

SQLITE的IFNULL(X,Y)函数用于将X的NULL值替换为Y但我无法理解使用SQLITE的NULLIF(X,Y)函数。 请用例子说明,这样更有用。

2 个答案:

答案 0 :(得分:12)

当数据库包含NULL值时使用IFNULL函数,但是您希望将这些值作为其他值处理;例如:

SELECT Name, IFNULL(Age, 'unknown') AS Age FROM People

当数据库包含 NULL但您想要处理为NULL的特殊值时,将使用NULLIF函数。 这对聚合函数尤其有用。例如,要获得获得奖金的员工数量,请使用:

SELECT COUNT(NULLIF(Bonus, 0)) FROM Employees

这与:

相同
SELECT COUNT(*) FROM Employees WHERE Bonus != 0

实际上,NULLIF不像IFNULL那样频繁使用。

答案 1 :(得分:0)

UPDAT INSERT 包含可能包含 NULL 字段的行时,我使用 NULLIF()

基本上是使用PHP的:

$value1 = 'foo';
$value2 = '';

$sql = 'INSERT INTO table(field1, field2) '
     . "VALUES(NULLIF('$value1', ''), NULLIF('$value2', ''))";

// => INSERT INTO table(field1, field2) VALUES(NULLIF('foo', ''), NULLIF('', ''))
// => INSERT INTO table(field1, field2) VALUES('foo', NULL)

它可以帮助我节省诸如:

$value1forSQL = ($value1 === '' || $value1 === NULL) ? 'NULL' : "'$value1'";
...
$sql = ...
     . "VALUES($value1forSQL, ...)";