2013-07-25 1 views
0

Мне нужно создать уникальный ключ для хранения в sql. предположим, что у нас есть дата "2013/07/25" на сегодня как мы можем генерировать уникальный 4-значный ключ на основе повседневной даты?генерировать 4-значный уникальный идентификационный ключ на основе даты

+0

Четырехзначный ключ может использоваться для индикации каждого дня в диапазоне около 27 лет. Достаточно ли этого для диапазонов дат? – Steve

+0

это прекрасный steve –

ответ

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); 

Конечно, вы могли бы легко подстроить ваш диапазон изменения даты базового и установив его на другое значение. Однако, после установки и начала сохранения данных в db, изменить базовое значение будет непросто. Я бы рекомендовал избежать этого шаблона и выбрать более гибкий способ хранения уникальных ключей в таблице, но, конечно, я не знаю ваших требований.

+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)