用字母数字在T-SQL中排序

时间:2012-10-03 05:57:20

标签: tsql sorting

我有一个SQL 2008数据库,其表格的字段为'category',类型为nvarchar,其值如下:

A1
A10
A2
B1/1
B1/2
B1/3
D1(1)
D1(2)

我知道这不是数据的好结构,但我们现在需要以某种方式缩小对此表的搜索范围,以便用户输入开始和结束类别(即A1到A15,或B1 / 1到B / 3)我们只希望返回带有这些类别值的记录。

有没有办法可以做到这一点?另一件事是我们也希望正确排序结果(即A2之后的A10)。

下进行。

1 个答案:

答案 0 :(得分:0)

您可以使用WHERE子句缩小返回结果的范围。例如:

SELECT  Col1
       ,Col2
       ...
       ,Coln
FROM SourceTable
WHERE Col1>'A1' AND Col1<'A15' 

您可以使用此值('A1'和'A15')作为用户定义函数的输入参数。然后很容易通过'B1'和'B15'或其他一切代替它们。

另外,如果你想在'A2'之后显示'A10'

有关用户定义函数的更多信息 - User Defined functions

在T-SQL中检查此information是否有字符串压缩。此外,您应该花一些时间进行冲突 - 您是在比较字符串区分大小写还是不区分大小写。

关于“另一件事是我们也希望正确排序结果(即A2之后的A10)”你可以在你的函数中添加一些逻辑:

DECLARE @ParamOne NVARCHAR(2)='A2'
DECLARE @ParamTwo NVARCHAR(3)='A10'

SELECT  CASE WHEN LEN(@ParamOne)=2
             THEN CASE WHEN @ParamTwo<STUFF(@ParamOne,2,0,'0')
                    THEN 1
             ELSE 2
             END
        ELSE
             CASE WHEN @ParamTwo<@ParamOne
                    THEN 1
             ELSE 2
             END
        END