5

我知道 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) 函数的使用。请举例说明,这样更有用。

4

2 回答 2

13

当数据库包含 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 那样经常使用。

于 2013-11-01T08:54:58.187 回答
0

UPDATINSERT包含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, ...)";
于 2018-09-24T06:43:21.823 回答