如何使用循环连接SQL中的连续数字字符串(在范围内)?

时间:2019-03-26 15:28:50

标签: sql sql-server loops

这个问题可能已经回答了,但是,我可能要解决另一个问题。

我有以下字符串:'123456'和以下范围:05 - 10

如何将字符串与范围内的每个数字连接起来,所以我有: 12345605 12345606 12345607 12345608 12345609 12345610

我将有一个存储过程,该过程接受6位数字的代码,范围内的最小和最大数字。然后,我将不得不对数据进行某种处理。可以稍后插入或删除它,或进行其他任何操作。

这就是存储过程中的内容:

declare
    @firstSix varchar(6),
    @min varchar(2),
    @max varchar(2)

To do that I have started to write a loop:

WHILE(CAST(@min AS int) <= CAST(@max AS int)
BEGIN
     --here I will need to write a logic that concatenates the string. 
     SET @min = @min + 1
     SELECT @firstSix
END

因此,使用以下输入 exec myProcedure '123456', '05', '10' 我将获得以下输出:

12345605
12345606
12345607
12345608
12345609
12345610

或使用以下输入 exec myProcedure '123456', '15', '20' 我将得到以下输出:

12345615
12345616
12345617
12345618
12345619
12345620

我可能需要确定一个逻辑,以判断范围内的值是否带有前导零或类似的数字

这里最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您要递归 CTE

function makeRequest(method, url) {
  return new Promise(function(resolve, reject) {
    var xhr = new XMLHttpRequest();
    xhr.open(method, url);
    xhr.onload = function() {
      if (this.status >= 200 && this.status < 300) {
        resolve(xhr.response);
      } else {
        reject({
          status: this.status,
          statusText: xhr.statusText
        });
      }
    };
    xhr.onerror = function() {
      reject({
        status: this.status,
        statusText: xhr.statusText
      });
    };
    xhr.send();
  });
}

let url1 = 'https://baconipsum.com/api/?type=all-meat&paras=3&start-with-lorem=1&format=json';
let url2 = 'https://baconipsum.com/api/?type=all-meat&paras=3&start-with-lorem=1&format=json'
Promise.all([makeRequest('GET', url1), makeRequest('GET', url2)])
.then(values => {
  debugger;
  console.log(values);
});

如果后缀较大,默认情况下具有with cte as ( select @firstSix as firstSix , cast(@min as int) as mn, cast(@max as int) as mx union all select firstSix, mn + 1 , mx from cte where mn < mx ) select concat(firstSix, right(concat('0', mn), 2)) from cte c; 递归级别,然后查询提示100

编辑:使用LOOP

option (maxrecursion 0)