在SQL中生成具有固定长度字符串前缀的列表
我只想生成一个这样的列表在SQL中生成具有固定长度字符串前缀的列表,sql,sql-server,list,Sql,Sql Server,List,我只想生成一个这样的列表 XY0001 XY0002 XY0003 所有行的前缀都相同。在本例中需要固定长度6 正在寻找一种简单的方法来生成这样的列表,并将其放入临时表中 MS SQL 对于一个非常小的数字,这可以: DECLARE @TempList TABLE (Name VARCHAR(100)); insert into @TempList Values ('XY00001') insert into @TempList Values ('XY00002')
XY0001
XY0002
XY0003
所有行的前缀都相同。在本例中需要固定长度6
正在寻找一种简单的方法来生成这样的列表,并将其放入临时表中
MS SQL
对于一个非常小的数字,这可以:
DECLARE @TempList TABLE (Name VARCHAR(100));
insert into @TempList Values ('XY00001')
insert into @TempList Values ('XY00002')
insert into @TempList Values ('XY00003')
insert into @TempList Values ('XY00004')
select * from @TempList
您可以使用临时理货表 如果2012年+ 返回 如果不是
我喜欢用递归的CTE来做这个
declare @max_number int = 1000;
with num as (
select 1 as n
union
select n + 1
from num
where n < @max_number
)
select 'XY' + (cast n as char(4))
from num;
递归CTE为您提供数字,强制转换使用0进行左填充,以确保获得0001而不是1
这种方法将支持数量可变的输出。虽然正如你在问题中提到的,如果你只想要几个,这就太过分了
您需要对边界情况进行测试。我还没有测试这个精确的代码示例
因为它使用递归,所以扩展的范围可能有限制。请标记您正在使用的dbms,并澄清您所说的列表的含义。这一个对我来说非常好,我可以根据我的情况使用我的知识进行调整。不幸的是,它不工作语法错误-第一种方法立即起作用,而且非常短,在我看来这很好。唯一的缺点是,我不明白-@Volker只要运行子查询,就会看到它只生成一个数字列表。理货/数字表也可以做到这一点-很高兴它有帮助
Name
XY0001
XY0002
XY0003
XY0004
...
XY9997
XY9998
XY9999
DECLARE @TempList TABLE (Name VARCHAR(100));
Select Name = 'XY'+right('00000'+cast(N as varchar(25)),4)
From (Select Top 9999 N=Row_Number() Over (Order By (Select NULL)) From master..spt_values N1,master..spt_values N2) A
Order by N
declare @max_number int = 1000;
with num as (
select 1 as n
union
select n + 1
from num
where n < @max_number
)
select 'XY' + (cast n as char(4))
from num;