(请参阅下面的我的答案以获取解决方案-感谢您的反馈)
这可能是很明显的,但我看不出我的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 function和SECOND is a valid interval。
短暂性脑缺血发作
最佳答案
我已经考虑过它会对类型感到不安-但是用“DATETIME”类型替换所有的“date”类型并不能解决问题-结果发现问题是在“SUBDATE”和“(”-我从来不知道MySQL对这样的事情很挑剔!
(我将此标记为asnwer,但希望我先等几天)
关于sql - 努力查看我的方法的错误(mysql函数),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4714032/