从MS Access数据库中的表中对数据进行排序

时间:2012-09-13 11:45:05

标签: sql sorting ms-access-2007

简化问题:我有一个包含一列的数据库表。在此列中,用户可以存储任何文本(因此我们有动态数据)。现在让我说我存储了 示例数据:

[a1, a2, a3, a20, a21]

当我现在从表中选择数据时,我希望它按如下方式排序:

a1, a2, a3, a20, a21

而不是这样:

a1, a2, a20, a21, a3

有没有办法没有编写复杂的算法(因为我使用Access2007并希望将表或任何查询绑定到表单中的元素),但只使用sql。

请注意: 如果用户只插入数字,则列类型可以简单地更改为数字。然后它会以正确的方式排序。但我还要处理字母和特殊字符。

1 个答案:

答案 0 :(得分:0)

你要求的是有几个步骤,每个步骤都有自己的困难,这是因为你想用SQL做。您对问题的短语without writing a complex algorithm和评论Everything is possible不兼容。 Everything is possible为你要做的事情增加了很多复杂性,主要是因为sql没有做你想做的事情。

  • 首先验证字符串的格式:是的,可以完成,但SQL是一种查询语言,如果可能,最好对外面的任何格式进行验证
  • 然后将其拆分考虑到可能出现的所有不同可能性:再次,SQL不适用于此,您可以这样做,但您的数据有许多不同的情况
  • 最后对值进行排序:再次排序并返回单个字符串。订购是在集合上完成的,而不是在一系列价值观中完成,但当然可以完成

@Remou在评论中谈到的是,不是列上的所有值,而是应该在不同的行上具有这些值。例如:

id    value
1      a1
2      a41
3      s2
4      a52
5      a1b99ccc

从这里你可以开始做一些订购。 您可以做的第一步是将字符串分成几行,保存在临时表中,从这里可以使用。您可以使用以下代码段在行上拆分字符串:

DECLARE @str NVARCHAR(100)= 'T,23,3434,332SB,1-1KD', @separator VARCHAR(1)= ','
DECLARE @SplitedList  TABLE (code NVARCHAR(30))

DECLARE @XMLList XML
SET @XMLList=CAST('<i>'+REPLACE(@str, @separator,'</i><i>')+'</i>' AS XML)

INSERT INTO @SplitedList
SELECT x.i.value('(./text())[1]','varchar(100)')
FROM @XMLList.nodes('i') x(i)

SELECT * FROM @SplitedList