我有一个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)。
下进行。
答案 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