我知道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)函数。 请用例子说明,这样更有用。
答案 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, ...)";