插入自定义自动增量字段

Posted

技术标签:

【中文标题】插入自定义自动增量字段【英文标题】:Inserting Custom Auto-increment Field 【发布时间】:2015-11-10 04:31:25 【问题描述】:

我需要一个查询来插入以下格式的自动增量字段:

150001(15 是 2015 年的最后两位数字,id 递增,如 0001、0002、0003 等)

直到 2016 年 3 月,它只需要显示为 2015 年 (15),3 月之后它应该更改为 2016 年 (16)。因为那是我们财政年度结束的时候。是否可以通过查询实现相同的目标:

 150001
 150002
 160001 etc

【问题讨论】:

好的,这只是一个强迫症问题。为什么需要这个 如果这很重要,为什么不简单地在存储过程中进行插入 我需要这个,以便用户可以了解某某 id 属于某某财政年度。150001 表示其 2015 财政年度数据。 只需将第二列与15一起使用 哦,存储过程是唯一的方法吗?我没有在存储过程中工作过.. 【参考方案1】:

可能是这样的(第一个假设):

SELECT CONCAT(
    IF(DATE_FORMAT(NOW(), '%m')<3, 
        DATE_FORMAT(t.created, '%y')-1,
        DATE_FORMAT(t.created, '%y')),
    LPAD(
        id + 1 - (
            SELECT MIN(id) FROM Tbl t2 WHERE
            IF(DATE_FORMAT(NOW(), '%m')<3, 
                DATE_FORMAT(t2.created, '%y')-1,
                DATE_FORMAT(t2.created, '%y')) =
            IF(DATE_FORMAT(NOW(), '%m')<3, 
                DATE_FORMAT(t.created, '%y')-1,
                DATE_FORMAT(t.created, '%y'))
        ), 
        4, 
        '0') super_id
FROM Tbl t;

【讨论】:

我当然不会根据 min 和无锁定动态生成我的 id。 我相信,在报告构建时在客户端语言(php/java/Delphi)上重新生成它要简单得多:) 它是一个 ID。 id 在其他表中使用。你的 id 是不稳定的,系统会上升。报告不生成 ID 完全没有理由在数据库中使用150007 id。这是视图表示 @vp_arth。当我试图在 mysql 中运行这个查询时,我得到的这个错误是什么。错误指出“#1582 - 调用本机函数'DATE_FORMAT'中的参数计数不正确【参考方案2】:

这就是诀窍……

-->> 1st: Get the last 2 digit of the year
SELECT RIGHT(YEAR(NOW()),2);

-->> 2nd: Pad 4 digit zeros
SELECT RIGHT(CONCAT('0000',1),4);

-->> 3rd: Concat the two query above, assuming that the column name is `ID_Column`
SELECT CONCAT(RIGHT(YEAR(NOW()),2), RIGHT(CONCAT('0000',ID_Column),4));

您现在可以将第三个查询的结果插入您的 id。

注意:如果你的id是integer,你必须把它转换成varchar

样本:

-->> Concat the two query above, replacing the column name value as 1
SELECT CONCAT(RIGHT(YEAR(NOW()),2), RIGHT(CONCAT('0000',1),4));

result: 150001

【讨论】:

这是什么服务器,sqlserver? @Japz..谢谢您的宝贵时间。但我在这一年有一个小问题。直到 2016 年 3 月,它只需要显示为 2015 年(15),3 月之后它应该更改为 2016 年(16)。因为那是我们财政年度结束的时候 你忘记了两件事:March 和 160001(重置计数器) @Japz..also iam 在 mysql 中运行时遇到错误.."#1582 - 调用本机函数 'ISNULL' 时参数计数不正确" @SanjuMenon ,啊,我明白了,我很抱歉..您使用的是 MySQL ,您可以删除 ISNULL(ID_Column,' ') 并仅将其替换为列名 ID_Column..

以上是关于插入自定义自动增量字段的主要内容,如果未能解决你的问题,请参考以下文章

每组值的自定义序列/自动增量

每组值的自定义序列/自动增量

LoopBack4 MongoDB 自动增量自定义 ID

oracle自增长

了解自增字段的值

k3 bom自定义字段如何自动携带到计划订单中