是否可以在两个电话号码之间获取值。 e.g。
DECLARE @startrange VARCHAR(20) = '1132282220'
DECLARE @endrange VARCHAR(20) = '1132282230'
我想你可以将这些变量转换为BIGINT。
期望的输出:
1132282220 1132282221 1132282222 1132282223 ... 1132282230
答案 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)