use AdventureWorksDECLARE @Pos int;
SET @Pos = '611';
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos - 400 -4 AND @Pos - 400 + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos - 300 -4 AND @Pos - 300 + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos - 200 -4 AND @Pos - 200 + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos - 100 -4 AND @Pos - 100 + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos -4 AND @Pos + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos + 100 -4 AND @Pos + 100 + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos + 200 -4 AND @Pos + 200 + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos + 300 -4 AND @Pos + 300 + 4
 UNION 
SELECT AddressID, AddressLine1
FROM Person.Address 
WHERE  AddressID BETWEEN @Pos + 400 -4 AND @Pos + 400 + 4;

解决方案 »

  1.   


    declare @sql nvarchar(4000)
    set @sql=''
    set @sql='SELECT AddressID, AddressLine1 '
     +' FROM Person.Address' 
     +' WHERE  AddressID BETWEEN'
    exec(@sql+@Pos + 400 -4 AND @Pos + 400 + 4;)--把条件限制好就更简单了
      

  2.   


    --try:SELECT AddressID, AddressLine1
    FROM Person.Address 
    WHERE  right(ltrim(AddressID),2) between 7 and 15
    and left(ltrim(AddressID),len(ltrim(AddressID)-2) between 2 and 10
      

  3.   

    试试
    DECLARE @Pos int;
    SET @Pos = '611';
    SELECT AddressID, AddressLine1
    FROM Person.Address 
    WHERE  addressid/10 - @pos/10 between -4 and 4
       and addressid%10 - @pos%10 between -4 and 4
      

  4.   

    --参考下吧create table Address
    (
    AddressID int,
    AddressLine1 nvarchar(40)
    )
    DECLARE @Pos int;
    SET @Pos = '611'declare @sql nvarchar(4000),
    @n int
    set @sql=''
    set @sql='SELECT AddressID, AddressLine1 '
     +' FROM Person.Address' 
     +' WHERE  AddressID BETWEEN '
    set @n=-5
    while @n<4begin
    set @n=@n+1
    print (@sql+cast(@Pos as nvarchar(10)) + ' +100*'+cast(@n as nvarchar(10))+' -4 AND '+ cast(@Pos as nvarchar(10)) + ' +100*'+cast(@n as nvarchar(10)) + '+4')
    --set @sql=(@sql+' union '+ (@sql+cast(@Pos as nvarchar(10)) + ' +100*'+cast(@n as nvarchar(10))+' -4 AND '+ cast(@Pos as nvarchar(10)) + ' +100*'+cast(@n as nvarchar(10)) + '+4'))
    end
    drop table Address
      

  5.   

    DECLARE @Pos int;
    SET @Pos = '611';
    SELECT AddressID, AddressLine1
    FROM Person.Address 
    WHERE (addressid - @pos)/100 between -4 and 4
       and (addressid - @pos)%100 between -4 and 4
      

  6.   

    DECLARE @Pos int;
    SET @Pos = '611';
    SELECT AddressID, AddressLine1
    FROM Person.Address 
    WHERE (addressid - @pos between -404 and -396)
        or(addressid - @pos between -304 and -296)
        or(addressid - @pos between -204 and -196)
        or(addressid - @pos between -104 and  -96)
        or(addressid - @pos between   -4 and    4)
        or(addressid - @pos between   96 and  104)
        or(addressid - @pos between  196 and  204)
        or(addressid - @pos between  296 and  304)
        or(addressid - @pos between  396 and  404)
      

  7.   

    DECLARE @Pos int;
    SET @Pos = '611';
    SELECT AddressID, AddressLine1
    FROM Person.Address 
    WHERE (addressid - @pos between -404 and -396)
        or((addressid - @pos)/100 between -3 and 3) and
           (addressid - @pos)%100 between -4 and 4))
        or(addressid - @pos between  396 and  404)
      

  8.   

    DECLARE @Pos int;
    SET @Pos = '611';
    SELECT AddressID, AddressLine1
    FROM Person.Address 
    WHERE ((addressid - @pos)%100) between   0 and 4
       
      

  9.   

    DECLARE @Pos int;
    SET @Pos = '611';
    SELECT AddressID, AddressLine1
    FROM Person.Address 
    WHERE (addressid+404 - @pos)/100 between 0 and 8
       and(addressid+404 - @pos)%100 between 0 and 8
      

  10.   

    csdn工作人员请勿给分  挺可爱个人。
    你们的方法都不错,学习了。
      

  11.   

    首先感谢各位给的各种方法,每一种都有学习的价值。我几乎试验了所有的句子(laowan688  4楼的没有去试)
    不过好像只有cson_cson的
    6楼和9楼的两段代码有正确答案。
    9楼更精炼。其他的要么有语法错误,要么结果集和想的不一样。每次问问题都能学不少东西。谢谢了各位。