按包含数字和字母的字段排序
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排序问题,字段中含有字母、数字、汉字,如何只按数字排序