MySQL用户定义函数使用日期自动递增值

Posted

技术标签:

【中文标题】MySQL用户定义函数使用日期自动递增值【英文标题】:MySQL user defined function auto increment value using Date 【发布时间】:2017-07-12 02:51:28 【问题描述】:

我能够获得以下代码来创建一个函数,该函数有助于根据输入的日期和行数生成自动增量值。但是我不能让它在 mysql 中执行。我以前从未创建过用户定义函数,所以请帮助更正代码。 (此代码由 MSSQL 查询转换而来)


CREATE FUNCTION udf_ComputeColumn (p_id int, p_CreateDate date)
RETURNS char(8) 
BEGIN
   DECLARE v_revtal char(8);
   DECLARE v_NumberOfRowsToday bigint;

-- get the number of rows inserted in the same day before the current row
SELECT COUNT(*) INTO v_NumberOfRowsToday 
FROM tickreqs
WHERE createdate= p_CreateDate
AND id < p_id;

-- calculate the string to return
SET v_revtal = DATE_FORMAT (p_CreateDate, 12) + RIGHT('0000' + 
CAST(v_NumberOfRowsToday as varchar(1)), 4);
RETURN v_revtal; 

END;

*tickreqs 表有 id 列和 createdate 列。

【问题讨论】:

为什么不用AUTO_INCREMENT 列而不是这个? 我想要一个基于日期的自动增量。比如 20170001, 20180001。AUTO_INCREMENT 会一直递增,对吧? Auto-increment - automatic reset for each year的可能重复 是的,它有点像,但请帮我把代码弄对,我总是遇到不正确的语法。我有 id 为 A.I PK 的表 tickreqs,存储当前年份的代码年和存储自动增量代码的请求代码,例如:20171、20172 ...这是我的代码CREATE TRIGGER GenRequestCode BEFORE INSERT ON tickreqs FOR EACH ROW BEGIN SET NEW.codeyear = YEAR(NOW()) SET NEW.requestcode = (SELECT IFNULL( MAX(requestcode) , 0 ) + 1 FROM tickreqs WHERE codeyear=YEAR(NOW())) END 我明白了。我忘了 ;签名并以某种方式创建了触发器。非常感谢豪尔赫。我会尝试格式化我的号码并发布答案。 【参考方案1】:

下面的代码可以完成工作,但可能会稍作调整。


CREATE TRIGGER GenRequestCode BEFORE INSERT ON tickreqs FOR EACH ROW
BEGIN
  SET NEW.codeyear = YEAR(NOW());
  SET NEW.requestcode = (SELECT IFNULL( MAX(requestcode) , 0 ) + 1 FROM tickreqs WHERE codeyear=YEAR(NOW()));
END

【讨论】:

【参考方案2】:

以下代码将为您提供代码为 20170001 20170002 等等。


CREATE TRIGGER GenRequestCode BEFORE INSERT ON tickreqs FOR EACH ROW
BEGIN
   DECLARE v_NumberOfRowsToday BIGINT;
   SELECT COUNT(*) INTO v_NumberOfRowsToday FROM tickreqs WHERE YEAR(createdate) = YEAR(NOW());
   SET NEW.requestcode = concat(YEAR(Now()), RIGHT(CONCAT('0000', 
CONVERt(v_NumberOfRowsToday + 1, CHAR)), 4));
END

【讨论】:

以上是关于MySQL用户定义函数使用日期自动递增值的主要内容,如果未能解决你的问题,请参考以下文章

R语言用户自定义函数的语法结构编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)应用自定函数

MySQL 自动递增自定义值

MySQL自动递增自定义值

日期递增的 Hive UDF

Mysql 创建自定义函数

在用户定义的函数中格式化日期(mysql)