2

我有一个 SQL 2008 数据库,其中的表具有 nvarchar 类型的字段“类别”,其值如下:

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

等等

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

有没有办法做到这一点?另一件事是我们还希望对结果进行正确排序(即 A10 在 A2 之后)。

C。

4

1 回答 1

0

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

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

您可以将此值(“A1”和“A15”)用作用户定义函数的输入参数。然后很容易通过'B1'和'B15'或其他所有东西而不是它们。

此外,如果您想在“A2”之后显示“A10”

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

检查此信息以了解 T-SQL 中的字符串压缩。此外,您应该花一些时间处理冲突——您是比较字符串区分大小写还是不区分大小写。

至于“另一件事是我们还希望对结果进行正确排序(即 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
于 2012-10-03T06:35:00.210 回答