(请参阅下面的我的答案以获取解决方案-感谢您的反馈)
这可能是很明显的,但我看不出我的sql有什么问题:

mysql> CREATE FUNCTION start_of_minute(
->     curdate DATE)
->   RETURNS DATE
->   DETERMINISTIC
->   SQL SECURITY INVOKER
->   BEGIN
->     DECLARE sofm DATE;
->     SET sofm = SUBDATE (
->         curdate,
->         INTERVAL SECOND(curdate) SECOND
->       );
->   RETURN sofm;
->   END //
ERROR 1064 (42000): 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 sofm;
END' at line 11

更令人沮丧的是,下面的工作:
mysql> CREATE FUNCTION start_of_week(
->     curdate DATE,
-> first_day_of_week INTEGER)
->    RETURNS DATE
->    DETERMINISTIC
->    SQL SECURITY INVOKER
->    BEGIN
->       DECLARE sow DATE;
->       SET sow = SUBDATE(
->         curdate,
->         INTERVAL (WEEKDAY(curdate)+(7-first_day_of_week)%7) DAY
->         );
->       RETURN sow;
->    END //
Query OK, 0 rows affected (0.00 sec)

(注意,在不同的层次上,可能有其他的截断日期的方法——我当然有兴趣听到它们,我真的想知道我的语法有什么问题——而不是计算句点开始的不同方法)。
是的,second() is a valid functionSECOND is a valid interval
短暂性脑缺血发作

最佳答案

我已经考虑过它会对类型感到不安-但是用“DATETIME”类型替换所有的“date”类型并不能解决问题-结果发现问题是在“SUBDATE”和“(”-我从来不知道MySQL对这样的事情很挑剔!
(我将此标记为asnwer,但希望我先等几天)

关于sql - 努力查看我的方法的错误(mysql函数),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4714032/

10-16 13:54
查看更多