数据库:Sql2008R2
要求 生成一组数列 已知 开始号码为 A0100001 和截止号码 A0101000
自动生成 A0100001
A0100002
A0100003
.....
A0100999
A0101000
第二种方法:已知开始号码为 A0100001 告知要生成1000个号码
自动生成 A0100001
A0100002
A0100003
.....
A0100999
A0101000
求sql语句
declare @qs varchar(20)='A0100001',@jz Varchar(20)='A0101000'
------解决思路----------------------
如果涉及到序列,这个序列一定是整数类型的。不然不好控制啊。最终的规则code可以后续拼凑在一起的。
如:
DECLARE @StarIndex INT=100001 ,@EndIndex INT=101000
WHILE @StarIndex <=@EndIndex
BEGIN
SELECT 'A0'+LTRIM(@StarIndex)
SELECT @StarIndex+=1
END
------解决思路----------------------
试试这个:
declare @qs varchar(20)='A0100001',@jz Varchar(20)='A0101000'
select left(@qs,1)+cast((cast(right(@qs,len(@qs)-1) as numeric)+s.number) as varchar)
from master..spt_values s
where s.number >=0
and s.type = 'P'
and s.number <= cast(right(@jz,len(@jz)-1) as numeric)-cast(right(@qs,len(@qs)-1) as numeric)
------解决思路----------------------
DECLARE @start int
DECLARE @finish int
SET @start = 10000001
SET @finish = 10001000
DECLARE @diff int
-- 如果已知起止,先求出差值
-- 如果已知开始和个数,差值=个数-1
SET @diff = @finish - @start
SELECT @start + number code
FROM master..spt_values
WHERE type = 'p'
AND number <= @diff
code
-----------
10000001
10000002
10000003
...
10000998
10000999
10001000
------解决思路----------------------
突然发现是我没有仔细看Tiger_Zhao的回答,我错了
------解决思路----------------------
;WITH a AS (
SELECT number FROM master..spt_values
),b AS (
SELECT rn=ROW_NUMBER() OVER(ORDER BY GETDATE()) FROM a x CROSS JOIN a y
)
SELECT 'A01'+RIGHT('00000000'+CAST(rn AS VARCHAR(10)),5) FROM b WHERE rn BETWEEN 1 AND 1000 --想要好多改好多
------解决思路----------------------
--第一种方法:要求 生成一组数列 已知 开始号码为 A0100001 和截止号码 A0101000
--1、求出要生成多少个号码
DECLARE @I INT
SELECT @I=CAST(SUBSTRING('A0101000',2,10) AS INT)- CAST(SUBSTRING('A0100001',2,10) AS INT)+1
--2、生成数列
SELECT 'A0'+CAST((100000+NUMBER) AS VARCHAR(10)) FROM master..spt_values WHERE [TYPE]='P' AND NUMBER BETWEEN 1 AND @I
--第二种方法:已知开始号码为 A0100001 告知要生成1000个号码
SELECT 'A0'+CAST((100000+NUMBER) AS VARCHAR(10)) FROM master..spt_values WHERE [TYPE]='P' AND NUMBER BETWEEN 1 AND 1000
-- master..spt_values 这个表里的数字只能到2047,如需要更多数列,请自己写一个数字字典表。