如何使用sql生成一个模式后面的数字?

时间:2015-04-21 13:52:05

标签: sql sql-server

我想在SQL Server中生成一个模式。

e.g。 PA0001

并每次递增(意味着如果PA0001已经生成,则下一个应该是PA0002,依此类推)。

我不知道该怎么做!

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

规范方法是使用一个indentity列,然后将此代码创建为计算列:

create table . . . (
    inc int not null identity(1, 1),
    . . .
    code as ('PA' + right('0000' + cast(inc as varchar(255)), 4)

这仅适用于一个前缀 - 如果您希望所有值都以0001开头。如果您有多个前缀,则可以:

  • 使用触发器。
  • 计算查询中的代码。
  • 更改您的要求,以便您可以使用没有其他含义的代码。

答案 1 :(得分:0)

你可以写成:

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

DEMO