SQL获取两个电话号码之间的值

时间:2016-01-08 16:36:25

标签: sql sql-server sql-server-2012

是否可以在两个电话号码之间获取值。 e.g。

DECLARE @startrange VARCHAR(20) = '1132282220'  
DECLARE @endrange VARCHAR(20) = '1132282230'

我想你可以将这些变量转换为BIGINT。

期望的输出:

  

1132282220 1132282221 1132282222   1132282223 ... 1132282230

1 个答案:

答案 0 :(得分:1)

如果要按表行获取值,可以使用下一个SQL代码

DECLARE @startrange VARCHAR(20),
        @endrange VARCHAR(20),
        @startrange_ BIGINT,
        @endrange_ BIGINT

DECLARE @result_tbl TABLE(VALUE BIGINT)

SET @startrange = '1132282220'
SET @endrange = '1132282230'
SET @startrange_ = CAST(@startrange AS BIGINT)
SET @endrange_ = CAST(@endrange AS BIGINT)

WHILE @startrange_ <= @endrange_
BEGIN
    INSERT INTO @result_tbl VALUES(@startrange_)

    SET @startrange_ = @startrange_ + 1
END

SELECT * FROM @result_tbl AS RT

如果您想在一行中获取值,可以使用此类代码

DECLARE @startrange VARCHAR(20),
        @endrange VARCHAR(20),
        @startrange_ BIGINT,
        @endrange_ BIGINT

DECLARE @output_value VARCHAR(MAX)

SET @startrange = '1132282220'
SET @endrange = '1132282230'
SET @startrange_ = CAST(@startrange AS BIGINT)
SET @endrange_ = CAST(@endrange AS BIGINT)

WHILE @startrange_ <= @endrange_
BEGIN
    SET @output_value = ISNULL(@output_value, '') 
                            + CAST(@startrange_ AS VARCHAR) + ' ' 

    SET @startrange_ = @startrange_ + 1
END

SELECT RTRIM(@output_value)

我也写了recursive CTE解决方案来解决这个问题

DECLARE @startrange VARCHAR(20),
        @endrange VARCHAR(20),
        @startrange_ BIGINT,
        @endrange_ BIGINT

DECLARE @output_value VARCHAR(MAX)

SET @startrange = '1132282220'
SET @endrange = '1132282230'
SET @startrange_ = CAST(@startrange AS BIGINT)
SET @endrange_ = CAST(@endrange AS BIGINT)

;WITH Result AS(
SELECT @startrange_ AS startrange
UNION ALL
SELECT startrange + 1 FROM Result
WHERE startrange < @endrange_)

SELECT @output_value = ISNULL(@output_value, '') 
                        + CAST(startrange AS VARCHAR) + ' '
FROM Result

SELECT RTRIM(@output_value)