2013-07-25 85 views
0

我需要生成唯一的密钥以存储在sql中。 假设我们有今天的日期“2013/07/25” 如何根据日常日期生成独特的4位数字密钥?基于日期生成4位数字唯一标识密钥

+0

一个四位数字的密钥可以用来表示在大约27年的范围内的每一天。这对你的日期范围足够了吗? – Steve

+0

这很好史蒂夫 –

回答

1

使用一个4位数字键,你可以从一个预定义的基地代表每天开始从该基地计数。

例如(使用1/1/2000作为基准):

DateTime dt = new DateTime(2000,1,1); 
DateTime dtEnd = dt.AddDays(9999); 
Console.WriteLine("Maximum date available:" + dtEnd.ToShortDateString()); 

dtEnd = new DateTime(2013,7,25); 
TimeSpan ts = dtEnd - dt; 
Console.WriteLine("Today Day number from base: " + ts.TotalDays); 

当然,你可以很容易地微调范围变更基准日,并把它设置为不同的值。但是,一旦设置并开始在数据库中保存数据,将不容易更改基准值。我建议避免这种模式,并选择一种更灵活的方式将唯一键存储在表中,但当然,我不知道您的要求。

+0

如果每天有超过1条记录会怎么样? –

+0

没有办法,然后有一个独特的关键,没有引入一些其他领域,如渐进计数或分钟计数器。但是,我不得不问,保存为日期的简单日期是无可争议的? – Steve

+0

我没有得到你的意思? –

1

我会采取自某日期以来的日子,如'2010-01-01'。这会给你多达10,000天,这是30年。

这里是这样做的方法:

select right('0000'+cast(datediff(day, '2010-01-01', @YOURDATE) as varchar(4)), 4)