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