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

时间:2012-04-05 12:50:14

标签: sql delphi delphi-xe2 paradox

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

我需要根据包含以下值的字段(示例中的id)对结果进行排序:'1','2 a','100','1b','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

我怎么能用矛盾实现这样的排序......?

2 个答案:

答案 0 :(得分:7)

试试这个:

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

答案 1 :(得分:1)

这些想法浮现在脑海中:

  1. 在delphi中创建一个排序函数,它使用比较/映射函数对客户端进行排序,该函数将字符串重新排列为可比较的字符串,也许是以字典方式。

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

  3. 将存储函数添加到修改值的paradox中,并在ORDER BY子句中使用此函数。

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

    我提出这些建议很少/不知道悖论或德尔福,所以你必须带着我的建议。