gpt4 book ai didi

MySQL Varchar 排序为 Int

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:09 25 4
gpt4 key购买 nike

这是我的问题。我有一个如下表:

+-----------+--------+
| data | number |
+-----------+--------+
| Something | NULL |
| Test | 1 |
| Another | 5 |
| Testy | 22 |
| Tester | NULL |
| Test2 | 3 |
+-----------+--------+

Number 字段的类型是VARCHAR,我需要按这一列进行排序。我不能做一揽子 CAST 因为我需要保留 NULL 值;我不想将它们变成 0

到目前为止,这是我尝试过的:

IF ( number != NULL, CAST( number AS UNSIGNED ), number ) as int_number

+

ORDER BY int_number

但这行不通,我想是因为 CAST 只能影响整个列,而不是单独影响每个值。

由于无法在此处解释的原因,我无法将此列转换为 INT 字段。

请测试您想到的任何答案。我标记为正确的答案不会是我看到的第一个答案,除非它已经过测试并且有效。

最佳答案

NULL should appear before all numbers

实现它的一种简单方法是使用 CAST:

SELECT * FROM tab ORDER BY CAST(number AS UNSIGNED)

SqlFiddleDemo

输出:

╔════════════╦════════╗
║ data ║ number ║
╠════════════╬════════╣
║ Something ║ (null) ║
║ Tester ║ (null) ║
║ Test ║ 1 ║
║ Test2 ║ 3 ║
║ Another ║ 5 ║
║ Testy ║ 22 ║
╚════════════╩════════╝

如果可能,您应该考虑将数据类型更改为 INT


另一种方法是使用隐式转换作为 Abhik Chakraborty在评论中提出:

SELECT * FROM tab ORDER BY number + 0

关于MySQL Varchar 排序为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34531756/

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