格式化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