2016-07-15 75 views
0

我希望它的格式是「YYYY - ###」,它給出年份和編號###從1開始入罪。例:2016-001,2016-002,2016-003,...使用mysql工作臺自動生成自定義ID?

+1

只選擇1分貝標籤設置的範圍從1到12,而不是3. –

+0

告訴我們更多關於你使用這個的地方。還有爲什麼你想這樣做。通常這種自動生成的ID不推薦使用它。請閱讀[** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/),瞭解如何提高您的問題質量並獲得更好的答案。 –

+0

無論DBMS如何,這都是一個糟糕的主意。通過將兩個值填充到單個元組中,您違反了1NF。您應該爲您的增量值設置一個列,並在創建該行的一年中創建另一個值。 –

回答

0

如果您願意,您可以使用數字/理貨表。我使用UDF來動態生成數字範圍。正如你可以在函數調用中看到我的1

Declare @Table table (SomeField int) 
Insert into @Table values 
(2015),(2016) 


Select StringValue =cast(SomeField as varchar(25))+'-'+right('000'+cast(RetVal as varchar(25)),3) 
     ,SomeField 
     ,RetVal 
From @Table A 
Join (Select RetVal=cast(RetVal as int) from [dbo].[udf-Create-Range-Number](1,12,1)) B 
    on (1=1) 

返回

StringValue SomeField RetVal 
2015-001 2015  1 
2015-002 2015  2 
2015-003 2015  3 
2015-004 2015  4 
2015-005 2015  5 
2015-006 2015  6 
2015-007 2015  7 
2015-008 2015  8 
2015-009 2015  9 
2015-010 2015  10 
2015-011 2015  11 
2015-012 2015  12 
2016-001 2016  1 
2016-002 2016  2 
2016-003 2016  3 
2016-004 2016  4 
2016-005 2016  5 
2016-006 2016  6 
2016-007 2016  7 
2016-008 2016  8 
2016-009 2016  9 
2016-010 2016  10 
2016-011 2016  11 
2016-012 2016  12 

爲增量的UDF

CREATE FUNCTION [dbo].[udf-Create-Range-Number] (@R1 money,@R2 money,@Incr money) 

-- Syntax Select * from [dbo].[udf-Create-Range-Number](0,100,2) 

Returns 
@ReturnVal Table (RetVal money) 

As 
Begin 
    With NumbTable as (
     Select NumbFrom = @R1 
     union all 
     Select nf.NumbFrom + @Incr 
     From NumbTable nf 
     Where nf.NumbFrom < @R2 
    ) 
    Insert into @ReturnVal(RetVal) 

    Select NumbFrom from NumbTable Option (maxrecursion 0) 

    Return 
End