如何搜索给定字符串值“周围”的行?

时间:2012-02-16 23:04:57

标签: sql-server-2005 tsql

我有一个名为varchar()的{​​{1}}字段的表格,其中包含该实体的唯一名称。

我想搜索该表,并在该标识符的任一侧找到具有给定标识符最多10行的行,按字母顺序排序(即,搜索到的标识符及其两边相邻的行。)

在SQL Server 2005中制定此功能的最佳方法是什么?我猜这里有一些identifier魔法可以做到这一点,但是我没有找到任何可以进行此类检查的查询。

这是我到目前为止所能接近的,但性能可怕

ROW_NUMBER()

该表有超过200万条记录,标识符字段可以长达1000个字符。

2 个答案:

答案 0 :(得分:5)

SELECT TOP 11 * FROM MyTable WHERE identifier >= 'My Value' ORDER BY identifier ASC
UNION ALL
SELECT TOP 10 * FROM MyTable WHERE identifier < 'My Value' ORDER BY identifier DESC

答案 1 :(得分:2)

这个答案更易于编译

declare @e table(identifier varchar(5))
insert @e values (0),(1),(2),(3),(4)

SELECT * FROM(
SELECT top 2 * 
FROM @e WHERE 
identifier >= '2' 
ORDER BY identifier asc) a
UNION ALL 
SELECT * FROM (
SELECT top 1 * 
FROM @e 
WHERE identifier < '2' 
ORDER BY identifier desc ) b