4

我需要从 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

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

4

2 回答 2

7

尝试这个:

SELECT id, CAST('0' + id AS INTEGER) A 
FROM "my.db" 
ORDER BY A, id
于 2012-04-05T14:26:01.517 回答
1

这些想法浮现在脑海:

  1. 在 delphi 中创建一个排序函数,该函数在客户端进行排序,使用比较/映射函数将字符串重新排列成可比较的东西,也许是按字典顺序排列的。

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

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

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

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

于 2012-04-05T13:04:29.033 回答