MySQL (10.1.24-MariaDB) ORDER BY 条件自动转换为字符串
MySQL (10.1.24-MariaDB) ORDER BY Condition autocasts as string
我有一个动态 MySQL 代码,它确实有一个 ORDER BY 子句。 table 包含多个列,但重要的是 stat 和 quality.
stat列是select语句中的数学计算,类型为INT类型,而quality列是STRING类型。
现在我确实有这样的声明:
SELECT (col1+col2+col3) as cast(STAT as unsigned), QUALITY FROM GEAR
ORDER BY CASE WHEN 1=1 THEN stat
WHEN 1=0 THEN quality END DESC
现在我确实希望上面场景中的代码以整数方式按 stat 列对结果进行排序:
stat quality
1 normal
2 normal
3 better
4 better
然而,结果显示的实际方式就像整数被自动转换为字符串一样:
stat quality
1 normal
11 normal
12 better
2 better
现在如果我:
- 删除第二个 case 1=0 语句(永远不会为真)
- 将 "quality" 列转换为 int(来自字符串)
- 将 WHEN 1=0 THEN QUALITY END DESC 中的 "quality" 值更改为任何其他数字列
该语句将正确运行并按 STAT 以整数方式对输出进行排序。
我试图理解为什么 MySQL (MariaDB) 决定对 stat 整数类型列进行排序string 方式如果 CASE/IF 语句里面 ORDER BY 包含另一个 WHEN[=45= 中的字符串类型列] 并找到避免这种情况发生的方法。
玛丽亚
平底船。不要那样做。
我假设 1=1
和 1=0
来自试图控制按哪一列排序的代码?让你的代码更聪明一点——这样它就可以生成
ORDER BY stat
或
ORDER BY quality
或者,如果您需要一个组合,那么请足够聪明地生成以下组合之一:
ORDER BY stat, quality
ORDER BY quality, stat
我有一个动态 MySQL 代码,它确实有一个 ORDER BY 子句。 table 包含多个列,但重要的是 stat 和 quality.
stat列是select语句中的数学计算,类型为INT类型,而quality列是STRING类型。
现在我确实有这样的声明:
SELECT (col1+col2+col3) as cast(STAT as unsigned), QUALITY FROM GEAR
ORDER BY CASE WHEN 1=1 THEN stat
WHEN 1=0 THEN quality END DESC
现在我确实希望上面场景中的代码以整数方式按 stat 列对结果进行排序:
stat quality
1 normal
2 normal
3 better
4 better
然而,结果显示的实际方式就像整数被自动转换为字符串一样:
stat quality
1 normal
11 normal
12 better
2 better
现在如果我:
- 删除第二个 case 1=0 语句(永远不会为真)
- 将 "quality" 列转换为 int(来自字符串)
- 将 WHEN 1=0 THEN QUALITY END DESC 中的 "quality" 值更改为任何其他数字列
该语句将正确运行并按 STAT 以整数方式对输出进行排序。
我试图理解为什么 MySQL (MariaDB) 决定对 stat 整数类型列进行排序string 方式如果 CASE/IF 语句里面 ORDER BY 包含另一个 WHEN[=45= 中的字符串类型列] 并找到避免这种情况发生的方法。
玛丽亚
平底船。不要那样做。
我假设 1=1
和 1=0
来自试图控制按哪一列排序的代码?让你的代码更聪明一点——这样它就可以生成
ORDER BY stat
或
ORDER BY quality
或者,如果您需要一个组合,那么请足够聪明地生成以下组合之一:
ORDER BY stat, quality
ORDER BY quality, stat