按包含数字和字母的字段排序

Posted

技术标签:

【中文标题】按包含数字和字母的字段排序【英文标题】:Order by a field containing Numbers and Letters 【发布时间】:2012-04-05 12:50:13 【问题描述】:

我需要从 Delphi XE2 下的现有 Padox 数据库中提取数据(是的,我将它们划分了 10 多年...)。

我需要根据包含以下值的字段(示例中为 id)对结果进行排序:'1'、'2 a'、'100'、'1 b'、'50 bis'...和得到这个:

- 1
- 1 b
- 2 a
- 50 bis
- 100

也许类似的东西可以做到,但那些关键字不存在:

SELECT id, TRIM(TRIM(ALPHA FROM id)) as generated, TRIM(TRIM(NUMBER FROM id)) as generatedbis, etc
FROM "my.db"
WHERE ...
ORDER BY generated, generatedbis

我怎样才能用悖论实现这样的排序......?

【问题讨论】:

【参考方案1】:

试试这个:

SELECT id, CAST('0' + id AS INTEGER) A 
FROM "my.db" 
ORDER BY A, id

【讨论】:

SELECT id, CAST(id AS INTEGER)... 更简单,而且成功了!!谢谢你启发我!! 是的,它更简单。我的想法是'0' + 将处理id 为空或第一个字符为Alpha 的情况。显然它是不需要的。很高兴我能帮上忙。 深思熟虑 ^^ 实际上如果第一个字符是 alpha,则强制转换为 int 返回 0 - 或 null 我并不在意 - 它是按我的需要排序的! a, b, 1, 1b, 12, 100 bis...再次感谢!【参考方案2】:

脑海中浮现出这些想法:

    在 delphi 中创建一个排序函数,该函数在客户端执行排序,使用比较/映射函数将字符串重新排列为可比较的内容,可能是按字典顺序排列。

    在您希望对其数据进行排序的表中添加一列,其中包含可与标准字符串比较进行比较的值的修改,因此可以与 ORDER BY 一起使用

    向 paradox 添加一个用于修改值的存储函数,并在 ORDER BY 子句中使用此函数。

通过修改,我的意思是,将字符串分成组件,然后将它们重新连接起来,每个组件右填充足够的空格,以便所有组件在字符串中的相同位置。只有当您可以自信地说对于每个组件,数据库中的任何值都不会超过特定长度时,这才会可靠地工作。

我提出这些建议时对 paradox 或 delphi 知之甚少/一无所知,因此您必须对我的建议持保留态度。

【讨论】:

用一整罐盐,我完全明白了这个想法...... 3. 看起来很有趣,但如果你能给我提供一个可以给我正确方向的样本,它可能会更方便^^

以上是关于按包含数字和字母的字段排序的主要内容,如果未能解决你的问题,请参考以下文章

SQLserver排序问题,字段中含有字母、数字、汉字,如何只按数字排序

oracle 表中如何对按含有字母和数字的编号来进行排序

在 django(postgres 后端)中按数字字符串排序查询结果

mysql字段排序数字在字母前面,字母也要按首字母排序

MYSQL数据库字母数字混合字段排序问题

MYSQL数据库字母数字混合字段排序问题