记录的连续编号...特定记录ID

时间:2014-09-22 20:53:32

标签: sqlite

我有一个SQLite DB,其日期字段如下:

  • 2011/06/15

    2012/03/23

    2013年3月23日

我想要做的是删除斜线(简单而且我已经完成了)但我希望每年使用顺序编号来制作日期,如下所示:

    • 20110615.0001

      20110615.0002

      20120615.0001

      20120615.0002

      20120615.0003

      20130615.0001

      20130615.0002

      20140615.0001

每年都会以一种单独的顺序方式计算,我从1998年到2014年有几年的历史,每一年都有成千上万的记录

为了澄清更多的事情,我在sqlite DB中存储了大约200万条记录并且每条记录都有一个日期,想要使用该日期为每条记录提供一个唯一的ID,如上例所示,当天或月份是不重要但我想用年份作为ID 2011 ****的基础.0001,2011 ****。0002并从0001计算到今年的任何数字和另一年开始重新计算......我希望我说清楚

感谢 ITD法

1 个答案:

答案 0 :(得分:0)

假设日期值已经采用yyyymmdd格式,您可以计算出同一年的前几行数量:

UPDATE MyTable
Set MyDate = MyDate ||
             printf('.%04d', (SELECT COUNT(*)
                              FROM MyTable AS T2
                              WHERE substr(T2.MyDate,      1, 4) =
                                    substr(MyTable.MyDate, 1, 4)
                                AND T2.MyDate <= MyTable.MyDate))

如果有重复日期,则必须使用其他一些唯一列:

UPDATE MyTable
Set MyDate = MyDate ||
             printf('.%04d', (SELECT COUNT(*)
                              FROM MyTable AS T2
                              WHERE substr(T2.MyDate,      1, 4) =
                                    substr(MyTable.MyDate, 1, 4)
                                AND T2.rowid <= MyTable.rowid))