【发布时间】:2022-10-16 12:13:22
【问题描述】:
我有以下创建函数用于 SQL 的块
/**
* tos_get_duration.sql
*
* Given time unit in seconds, it converts to more readable format
*
* Eg. SELECT TOS_GET_DURATION(72) => 00d 0:1:12
*/
DROP FUNCTION IF EXISTS TOS_GET_DURATION;
DELIMITER $$
CREATE FUNCTION TOS_GET_DURATION(seconds INT)
RETURNS VARCHAR(16)
BEGIN
RETURN CONCAT(LPAD(FLOOR(HOUR(SEC_TO_TIME(seconds)) / 24), 2, 0), ' days ',TIME_FORMAT(SEC_TO_TIME(seconds % (24 * 3600)), '%H:%i:%s'));
END;
$$
DELIMITER;
它取自timeonsite analytics reporting 查询页面。
它曾经在 MySql 中运行良好,但我最近切换到 MariaDB 并尝试执行此功能;这个函数基本上将秒转换为更易读的字符串格式。我收到以下错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER' at line 1
Server version: 10.5.16-MariaDB - MariaDB Server
请帮助我找到问题并建议我可以在两者中使用的常见“创建函数”格式MySql 和 MariaDB 数据库。
【问题讨论】:
-
DELIMITER 不是 SQL 语句,而是客户端命令。阅读有关如何正确创建存储对象的 PhpMyAdmin 文档。
-
PS。在您的特定情况下,您可以简单地删除 BEGIN-END 和两个 DELIMITER 行。
-
'建议我可以在 MySql 和 MariaDB 数据库中使用的常见“创建函数”格式。' - 不能这样做 mysql 和 mariadb 正在发散,并且已经发散到不能将 mariadb 视为 mysql 替代品的地步。 (在我看来)
-
在
DELIMITER和DETERMINISTIC关键字之后需要一个空格。见Delimitres 和CREATE FUNCTION - MySQL 8 fiddle -
这回答了你的问题了吗? phpMyadmin DELIMITER Error True or False?