Reputation: 1138
Would it be possible to get values in between two phone numbers. e.g.
DECLARE @startrange VARCHAR(20) = '1132282220'
DECLARE @endrange VARCHAR(20) = '1132282230'
Id imagine you convert these variables to BIGINT .
Desired output:
1132282220 1132282221 1132282222 1132282223... 1132282230
Upvotes: 0
Views: 59
Reputation: 1263
If you want to get values by table rows you can use next SQL code
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
If you want to get values in one row you can use code like this
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)
Also I've written recursive CTE
solution to solve this task
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)
Upvotes: 1