昨天晚上老板说,很多会员参加完活动,没有返还积分,要我排查一下,看了看,是前任写的存储过程,长达 100 行,写的真溜。
底下还有一个小的存储过程,先拿来分享一下:
SET SESSION SQL_MODE = @OLD_SQL_MODE;;
# Dump of PROCEDURE BATCH_ADD_CHILD_BIRTH
# ------------------------------------------------------------
DROP PROCEDURE IF EXISTS `BATCH_ADD_CHILD_BIRTH`;;
SET SESSION SQL_MODE = "NO_ENGINE_SUBSTITUTION";;
CREATE DEFINER = `root`@`localhost` PROCEDURE `BATCH_ADD_CHILD_BIRTH`()
BEGIN
# Routine body goes here...
# 取出身份证中的生日
UPDATE `scrm_contacts`
SET `birthday` = FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(SUBSTRING(identity, 7, 8) AS DATETIME)), '%Y-%m-%d')
WHERE birthday = ''
AND `identity` REGEXP '[0-9]{18}|[0-9]{17}X|[0-9]{15}';
END;;
短短存储过程,只有几行代码,用到了大量的 MySQL 函数,居然还有正则表达式