如何在插入时操作mysql列字段?

hpa*_*nia 2 mysql

在波斯语中(最好说波斯语),像32.98这样的十进制数写成32/98(使用斜杠代替点)

例如,我有一个表X和一个列L(varchar 20).我想定义一个替换任何/with 的MySQL函数.如果向L插入任何值,则在保存之前替换值.

可以肯定它可以在执行查询中实现,但我想在MySQL中完成它.

Joh*_*Woo 6

只是用 REPLACE()

SELECT L AS origL, REPLACE(L, '/', '.') AS newL
Run Code Online (Sandbox Code Playgroud)

所以在你的INSERT发言中,

INSERT INTO X (L) VALUES(REPLACE('yourValueHere', '/', '.'))
Run Code Online (Sandbox Code Playgroud)

更新1

使用Trigger:

DELIMITER $$
CREATE TRIGGER replaceToPeriod
BEFORE INSERT ON X
FOR EACH ROW 
BEGIN
    SET NEW.L = REPLACE(NEW.L, '/', '.');
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

TRIGGER执行完毕后,您现在可以直接插入记录,触发器会自动替换该值.

INSERT INTO X (L) VALUES('32/97')
Run Code Online (Sandbox Code Playgroud)

更新2

运用 STORED PROCEDURE

DELIMITER $$
CREATE PROCEDURE InsertRecord(IN _val VARCHAR(20))
BEGIN
    INSERT INTO X (L) VALUES(REPLACE(_val, '/', '.'));
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

调用程序:

CALL InsertRecord('32/97');
Run Code Online (Sandbox Code Playgroud)

  • 我想你正在寻找`TRIGGER`.请耐心等待. (2认同)