Sql 如何拥有每月重置的数据库计数器?

Sql 如何拥有每月重置的数据库计数器?,sql,database,counter,reset,Sql,Database,Counter,Reset,我有一个应用程序,需要为每个项目生成一个唯一的标识符,这个标识符是一些首字母、日期和每个新项目递增的4位数字的混合。棘手的是,最后4位数字应该每月重置一次 例如,假设我们有UID“SP-20121218-0001”,最后4位“0001”将一直递增到1月份,然后1月份创建的第一个项目应该有“SP-20130101-0001” 有什么想法吗?一个可能的选择是将最后4位数字建立在数据库序列的基础上,然后有一个单独的过程,在新的月份开始时重置该数据库序列。创建一个包含字段Year、month、Curre

我有一个应用程序,需要为每个项目生成一个唯一的标识符,这个标识符是一些首字母、日期和每个新项目递增的4位数字的混合。棘手的是,最后4位数字应该每月重置一次

例如,假设我们有UID“SP-20121218-0001”,最后4位“0001”将一直递增到1月份,然后1月份创建的第一个项目应该有“SP-20130101-0001”


有什么想法吗?

一个可能的选择是将最后4位数字建立在数据库序列的基础上,然后有一个单独的过程,在新的月份开始时重置该数据库序列。

创建一个包含字段Year、month、CurrentCount的表。编写一个存储过程,为当前年份和月份选择一行,如果该行不存在,则创建该行并递增数字。

对我来说,这听起来像是存储函数的完美用例

在postgresql中,您可以通过创建一个序列,然后使用函数从序列中选择一个值,并计算当前日期,以及在日期转换时重置序列来实现这一点

不过,最好的办法是不用麻烦重新设置序列,只需使用一个唯一的数字加上日期即可。

只是一个简单的想法(可能不是最佳解决方案),但是如果计数器带有年和月的附加字段,您只需增加当前
(年,月)
?大约一个月一次,你可以整理旧的月份,甚至让它们跟踪你在那个月生成了多少UID。