在SQLite中,实现NULLS LAST
的功能可以通过在ORDER BY
子句中使用CASE
语句来间接完成。SQLite默认的排序行为是将NULL
值视为最小值,因此它们会在使用ASC
(升序)排序时出现在前面,使用DESC
(降序)排序时出现在后面。如果您希望在升序排序时让NULL
值出现在最后,您需要自定义排序逻辑。
示例:
假设我们有一个叫做employees
的表,其中包含name
和salary
两个字段,我们想按salary
进行升序排序,但希望NULL
值出现在所有非NULL
值之后。
sqlSELECT name, salary FROM employees ORDER BY CASE WHEN salary IS NULL THEN 1 ELSE 0 END, -- First order by this expression to push NULLs to the end salary ASC; -- Then order by salary
在这个例子中,CASE
语句生成一个新的列用于排序。当salary
是NULL
时,这个表达式返回1,否则返回0。因此,所有非NULL
的salary
值(产生0)会排在NULL
值(产生1)之前。随后,对于那些非NULL
的值,会依据实际的salary
值进行升序排序。
使用这种方法,即使SQLite本身不直接支持NULLS LAST
语法,您仍然可以实现类似的效果。
2024年7月21日 20:44 回复