создать регистрационный номер - PullRequest
2 голосов
/ 09 декабря 2010

Мне нужно сгенерировать регистрационный номер, подобный этому, с помощью perl и mysql:

xx-201012080001

первая часть - просто пара символов, за которой следует датапоследние четыре цифры - проблема, она должна начинаться с 0001 и увеличиваться на единицу для каждого случая.реальная проблема в том, что он должен перезагружаться в 0001 каждый день.

есть предложения, как это сделать?

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

используйте sprintf для генерации строки:

 my $casenumber = sprintf("%2s-%8d%04d", $twochars, $date, $increment);

Например, в командной строке:

$ perl -e 'printf("%2s-%8d%04d\n", "aa", "20101211", 2);'
$ aa-201012110002

Что касается сброса вашего счетчика в 1, сохраните переменную с именем $ lastDateдля каждой записи в вашей итерации.Если $ lastDate! = $ CurrentDate, вы сбрасываете свой счетчик на 1.

Например:

# assumes @records contain arrayrefs with relevant info from mysql
# also assumes the data is sorted by date.
my $count = 1;
my $lastDate;
my $currentDate;
for my $record (@records)
{
   my $twochars    = $record->[0];
   my $currentDate = $record->[1];
   if($currentDate != $lastDate)
   {
     $count = 1;
   }
   my $casenumber  = sprintf("%2s-%8d%04d", $twochars, $currentDate, $count++);
   $lastDate = $currentDate;
}
0 голосов
/ 09 декабря 2010

Как насчет использования запроса, подобного этому:

select casenr from cases where casenr like ? order by 1 desc limit 1

где ? - это префикс на сегодняшний день ("xx-20101208").

Это должно дать вам последний casenr на сегодняшний день или NULL, затем просто увеличьте суффикс или установите его на 0001.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...