【问题标题】:Sorting Column with alphanumeric values in datatable在数据表中使用字母数字值对列进行排序
【发布时间】:2016-08-11 04:47:16
【问题描述】:

我有一列的值以'C'为前缀,如C72, C4, C54, C39,当我按降序排序时,它变成了,

C72, C54, C4, C39

但我不想这样

C72, C54, C39, C4

我该怎么做?

【问题讨论】:

  • 您使用的是什么版本的 SQL?列中的每个值是否都具有C### 格式,即单个字母C 后跟任意位数?
  • @TimBiegeleisen 是 每个值都以C为前缀
  • 我已经发布了答案,看看

标签: sorting datatable


【解决方案1】:

假设您使用的是 MSSQL SERVER,您可以使用 PATINDEX & CASTCONVERT 来实现它。使用 PATINDEX 仅从每个值中检索数字部分作为子字符串,并使用 CAST 将检索到的值转换为 INT 并使用 Order By

Select *  
From 
    Tablename 
ORDER BY 
    CAST(substring([colname],PATINDEX('%[0-9]%',[colname]),len([colname])) AS INT) DESC

【讨论】:

    【解决方案2】:

    如果您使用的是 SQL Server,请查看此链接。 http://www.essentialsql.com/use-sql-server-to-sort-alphanumeric-values/

    【讨论】:

      【解决方案3】:

      如果您想按字母C 之前的数字降序排列,那么您只需将数字的文本作为子串并转换为整数:

      SELECT col
      FROM yourTable
      ORDER BY CAST(SUBSTRING(col, 2, LEN(col) - 1) AS INT) DESC
      

      此答案假定列中的每个值都以字母 C 为前缀。

      【讨论】:

      • 非常感谢,但问题是我在通过查询检索时得到了预期的数据,但在数据表中发生了同样的问题。
      • 你能详细说明你的意思吗?
      • 我想在数据表中实现相同的排序,它随机化我的数据,但是我在通过查询检索时对其进行排序。
      • 您的数据库中没有内部订单。唯一存在的顺序是您在查询时强加的顺序。
      • 是的,我明白了...我使用了按预期排序的查询和数据,然后我使用数据表显示数据,但它再次按照默认设置随机排序...
      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 2021-04-04
      • 2021-12-06
      • 2015-10-14
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2021-01-03
      相关资源
      最近更新 更多