如何使用sql按照模式生成数字?
我想在SQL Server中生成一个模式 e、 g.PA0001 并每次递增(意味着如果已经生成PA0001,则下一个应该是PA0002,依此类推) 我不知道该怎么办如何使用sql按照模式生成数字?,sql,sql-server,Sql,Sql Server,我想在SQL Server中生成一个模式 e、 g.PA0001 并每次递增(意味着如果已经生成PA0001,则下一个应该是PA0002,依此类推) 我不知道该怎么办 有人能帮忙吗?规范的方法是创建一个标识列,然后将此代码创建为计算列: create table . . . ( inc int not null identity(1, 1), . . . code as ('PA' + right('0000' + cast(inc as varchar(255)), 4
有人能帮忙吗?规范的方法是创建一个标识列,然后将此代码创建为计算列:
create table . . . (
inc int not null identity(1, 1),
. . .
code as ('PA' + right('0000' + cast(inc as varchar(255)), 4)
这只适用于一个前缀——如果希望所有值都以0001开头。如果有多个前缀,则可以:
- 使用触发器
- 计算查询中的代码
- 更改您的要求,以便您可以使用没有其他含义的代码
- 您可以写为:
create table Test
(
ID int identity not null primary key,
pattern varchar(100)
)
Go
create function Nextpattern (@id int)
returns varchar(20)
as
begin
return 'PA' +
CONVERT(VARCHAR(10), GETDATE(), 110) + right('00' + convert(varchar(10), @id), 2)
end
--Solution 1:
Go
alter table Test add Newpattern as dbo.Nextpattern(ID)
Go
insert into Test values (1)
Go
--solution2:
-- not good as what if two processes attempt to
-- add a row to the table at the exact same time?
create function dbo.fnNextpattern()
returns varchar(20)
as
begin
declare @lastval varchar(20)
set @lastval = (select max(pattern) from Test)
if @lastval is null set @lastval = 'PA' +
CONVERT(VARCHAR(10), GETDATE(), 110) + '01'
declare @i int
set @i = right(@lastval,2) + 1
return 'PA' +
CONVERT(VARCHAR(10), GETDATE(), 110)+ right('00' + convert(varchar(10),@i),2)
end
go
前缀总是
'PA'
?事实上,这种模式要复杂一些!这是PA+“CURRENTDATE”+“01,所以每天他们的数字部分都会重置,向下投票原因:为什么你不问问你需要的真实模式?人们在浪费时间回答一个不相关的问题。这可以在函数中而不是在表中完成吗?