mysql - 当要排序的列是 case 语句时,如何通过 BigInteger 而不是 varchar 使 MySQL 排序值?

标签 mysql sql sql-order-by

我有一个 SQL 查询:

SELECT column_1, column_2, column_3 
FROM table_1 join table_2 .... 
ORDER BY
CASE :expression
WHEN 'Column_1' then column_1
WHEN 'Column_2' then column_2
WHEN 'Column_3' then column_3
END asc;

我在我的 Java 代码中使用它,用 native 查询调用它。 该表是这样定义的:

column_1 BIGINT(20)
column_2 VARCHAR(20)
column_3 INT(11)

第 1 列包含从 1 到 9999 的值。当我尝试按第 1 列对该查询进行排序时,我的结果像文本一样排序。例如:

预期结果:

|column_1|
_________
98
99
100
101
...

实际结果:

|column_1|
_________
100
101
98
99
...

你们中有人知道如何使用我所说的语法使 MySQL 按 column_1 排序并使其工作吗?我尝试过转换、转换、加 0 和乘以 1,但都无济于事。当我删除其中包含 VARCHAR 列的案例时,查询将完美运行。不幸的是,当它们存在时,就会发生这种情况。有人吗?

最佳答案

将其分成单独的 case 表达式:

ORDER BY (CASE WHEN :expression = 'Column_1' THEN column_1 END),
         (CASE WHEN :expression = 'Column_2' THEN 'column_2' END),
         (CASE WHEN :expression = 'Column_3' THEN 'Column_3' END)

您遇到的问题是由类型转换引起的。 case 表达式返回单个值。如果 THEN 值之一是字符串,则类型转换规则会将 所有 转换为字符串——这就是您遇到的问题。

关于mysql - 当要排序的列是 case 语句时,如何通过 BigInteger 而不是 varchar 使 MySQL 排序值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41100268/

相关文章:

python - 使用 SQLFORM.grid 添加/编辑条目时对表引用下拉列表进行排序

php - 数据库; ORDER BY STR_TO_DATE 反之亦然

mysql 排名变量

mysql - SQL - 如何从具有特定数据值和只出现一次的键的表中选择一行

sql - 我可以通过给出 regexp_substr 的查询来创建选择组吗?

php - 如何使用 PHP 从 MySQL 查询中按升序排列值?

c# - Nunit MySQL 错误

PHP/MySQL : Storing item ids

PHP MYSQL 访问被拒绝用户错误

php - 从 PHP 为 Postgresql 查询构建交互式 WHERE 子句