gpt4 book ai didi

mysql - 始终将 NULL 排序为空字符串或 0

转载 作者:行者123 更新时间:2023-11-30 22:29:54 31 4
gpt4 key购买 nike

我试图在我们的系统 ORDER BY 中使用 NULL 和空字符串进行相等的查询(仅在 ORDER BY 中)。我通过将 IFNULL(field, "") 添加到所有 GROUP BY 字段来解决这个问题。

现在的问题是,如果字段类型是数字,那么该字段将转换为 String,它将在 20 之前对 100 进行排序,因为它是按字母顺序排列的,而不是按数字排列的。如果我将“”更改为 0,它会将所有内容都转换为 int,这会使 varchar 字段的排序出错。

有没有一种通用的方法可以让我说“如果它为 NULL,则在 ORDER BY 上将其视为空字符串”?或者,“如果字段类型是字符串,则使用此函数”?在这个简单的示例中,我可以根据字段切换辅助值,但我正在寻找更全局的解决方案。

示例表数据:

---------------
|id|person|age|
|1 |Zzz |100|
|2 | |0 |
|3 |NULL |2 |
|4 | |2 |
---------------

一些例子:

//correct results
SELECT * FROM test ORDER BY IFNULL(`person`, ""), id ASC;
//null and empty strings not sorted properly
SELECT * FROM test ORDER BY IFNULL(`person`, 0), id ASC;

//correct results
SELECT * FROM test ORDER BY IFNULL(`age`, 0), id ASC;
//100 is turned to a string and therefor appears above 2
SELECT * FROM test ORDER BY IFNULL(`age`, ""), id ASC;

最佳答案

我很确定没有神奇的选择可以做你想做的事。

但是,您可能会考虑在 CREATE TABLE 语句中使用 DEFAULT 值,因此请避免使用 NULL 值——只需将默认值设置为 0'' 取决于数据类型。

关于mysql - 始终将 NULL 排序为空字符串或 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34156350/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com