简化问题:我有一个包含一列的数据库表。在此列中,用户可以存储任何文本(因此我们有动态数据)。现在让我说我存储了 示例数据:
[a1, a2, a3, a20, a21]
。
当我现在从表中选择数据时,我希望它按如下方式排序:
a1, a2, a3, a20, a21
而不是这样:
a1, a2, a20, a21, a3
有没有办法没有编写复杂的算法(因为我使用Access2007并希望将表或任何查询绑定到表单中的元素),但只使用sql。
请注意: 如果用户只插入数字,则列类型可以简单地更改为数字。然后它会以正确的方式排序。但我还要处理字母和特殊字符。
答案 0 :(得分:0)
你要求的是有几个步骤,每个步骤都有自己的困难,这是因为你想用SQL做。您对问题的短语without writing a complex algorithm
和评论Everything is possible
不兼容。 Everything is possible
为你要做的事情增加了很多复杂性,主要是因为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