【问题标题】:Sort MySQL colum as number if it includes characters '(' , '/' and ')'如果 MySQL 列包含字符 '(' , '/' 和 ')',则将其排序为数字
【发布时间】:2021-06-18 16:24:31
【问题描述】:

我认为这是不可能的,但我更愿意询问社区。​​p>

我在 MySQL 中有一个类型为 varchar 的列,其中存储了数字和字符,例如 '('、'/' 和 ')'。

存储的数据对应一个数字顺序,例如:

1
2 (1/2), 2 (2/2)
3
4
5 (1/3), 5 (2/3), 5 (3/3)
...

显然,如果我通过ORDER BY 'mycol' ASC 订购此字符串,1,10,11,12, .., 2,20 首先出现,我希望它被订购为 INT 但我不能将 CAST 设为有字符 '(' , '/' 和 ')'。

这可以在 MySQL 中排序吗?

【问题讨论】:

  • 请阅读editing-help,并使用edit添加预期输出。
  • 不是“例如” - 提供 CREATE TABLE + INSERT INTO 和该数据所需的排序输出。包括所有可能的变化。

标签: mysql character sql-order-by


【解决方案1】:

你可以这样做:

ORDER BY mycol+0 ASC

空格后面的任何内容都将被忽略(带有警告,这是无害的)。

【讨论】:

  • 问题是如果它是一个字符串,如果它作为一个数字排序,那么顺序将是 1,10,11,12..2,20,21 ..., 3,30, 。 .. 要解决这个问题,你可以在 mysql 本身中按强制转换顺序进行 CAST(列为无符号),但是由于有 '(', '/', ')' 字符,这个 CAST 被覆盖我不知道如何将 varchar 排序为数字,但除数字外还包含其他字符
  • 试试吧!使用+0,顺序将是 1,2,10,11,12,20,21(忽略数字后的其他内容)
猜你喜欢
  • 2018-04-02
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 2020-02-14
  • 2011-01-04
  • 1970-01-01
  • 2021-11-22
  • 2019-03-15
相关资源
最近更新 更多