Mysql 自定义函数简单例子

格式化NOW函数:

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2017-07-07 16:08:44 |
+---------------------+
1 row in set

mysql> SELECT DATA_FORMAT(NOW,'%y年%m月%d日 %H点:%i分:%s秒');
1305 - FUNCTION test.DATA_FORMAT does not exist
mysql> SELECT DATE_FORMAT(NOW,'%y年%m月%d日 %H点:%i分:%s秒');
1054 - Unknown column 'NOW' in 'field list'
mysql> SELECT DATE_FORMAT(NOW(),'%y年%m月%d日 %H点:%i分:%s秒');
+--------------------------------------------------+
| DATE_FORMAT(NOW(),'%y年%m月%d日 %H点:%i分:%s秒') |
+--------------------------------------------------+
| 17年07月07日 16点:10分:41秒                      |
+--------------------------------------------------+
1 row in set

创建无参自定义函数:

mysql> CREATE FUNCTION f1() RETURN VARCHAR(30)
    -> RETURN DATE_FORMATE(NOW(),'%y年%m月%d日 %H点:%i分:%s秒');
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'RETURN VARCHAR(30)

RETURN DATE_FORMATE(NOW(),'%y%m%d%H点:%i分:%s' at line 1
mysql> CREATE FUNCTION f1() RETURNS VARCHAR(30)
    -> RETURN DATE_FORMAT(NOW(),'%y%m%d%H点:%i分:%s');
Query OK, 0 rows affected

调用函数:

mysql> select f1();
+-----------------------------+
| f1()                        |
+-----------------------------+
| 17年07月07日 16点:27分:49秒 |
+-----------------------------+
1 row in set

创建有参自定义函数:

mysql> CREATE FUNCTION f2(num1 smallint UNSIGNED,num2 smallint UNSIGNED)
    -> RETURNS FLOAT(10,2) UNSIGNED
    -> RETURN  (num1+num2)/2;
Query OK, 0 rows affected

mysql> select f2(1,2);
+---------+
| f2(1,2) |
+---------+
|     1.5 |
+---------+
1 row in set

MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。

参考博客:点它

创建复合结构体的自定义函数:
delimiter:参考博客:MYSQL中delimiter的作用

store表:

store | CREATE TABLE `store` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `count` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 |
mysql> delimiter //
mysql> CREATE FUNCTION adduser(username VARCHAR(20),num smallint)
    -> RETURNS INT UNSIGNED
    -> BEGIN 
    -> insert into store(id,name,count) values(null,username,num);
    -> RETURN LAST_INSERT_ID();
    -> END
    -> //
Query OK, 0 rows affected
mysql> delimiter ;
mysql> select adduser('HELLOWORLD',12);
+--------------------------+
| adduser('HELLOWORLD',12) |
+--------------------------+
|                        9 |
+--------------------------+
1 row in set

你可能感兴趣的:(Mysql)