预期的结果是将一个字段的编辑注解存储在另一个字段中。我想把新的注解附加到存储字段中,由于不是函数做的,所以我试图找到一种方法来解决这个问题,而不需要添加更多的代码层,比如函数和存储过程。
/* Before Update Trigger */
DECLARE v_description VARCHAR(255);
DECLARE v_permnotes MEDIUMTEXT;
DECLARE v_oldnote VARCHAR(500);
DECLARE v_now VARCHAR(25);
SET v_now = TRIM(DATE_FORMAT(NOW(), '%Y-%m-%d %k:%i:%s'));
SET v_oldnote = OLD.notes;
IF (NEW.permanent_notes IS NULL) THEN
SET v_permnotes = '';
ELSE
SET v_permnotes = OLD.permanent_notes;
END IF;
SET NEW.permanent_notes = CONCAT_WS(CHAR(10), v_permnotes, v_now,": ", v_description);
我的目标是让永久领域的结果像这样
<datetime value>: Some annotation from the notes field.
<a different datetime>: A new annotation
etc....
从当前触发器得到的信息:
2018-12-30 17:15:50
:
Test 17: Start from scratch.
2018-12-30 17:35:51
:
Test 18: Used DATE_FORMAT to sxet the time
2018-12-30 17:45:52
:
Test 19. Still doing a carriage return after date and after ':'
我不明白为什么在日期之后有一个新行,然后在“:”之后又有一个新行。
如果省略char(10),我得到:
Test 17: Start from scratch.
2018-12-30 17:35:51
:
Test 18: Used DATE_FORMAT to sxet the time
2018-12-30 17:45:52
:
Test 19. Still doing a carriage return after date and after ':'Test 20. Still doing a carriage return after date and after ':'
一些新的/更有经验的眼睛会对调试这个非常有帮助。
谢谢。
1条答案
按热度按时间wh6knrhe1#
我觉得你应该用普通的
CONCAT
在这里:这里的逻辑是我们有条件地打印换行符(
CHAR(10)
)在每个新的日志行之前,只要该行不是第一行。你不是真的想要CONCAT_WS
这里,主要是为了在多个术语之间添加分隔符。在每个日志语句之间只需要一个换行符。