纠正WEEK的MySQL语法

时间:2013-10-14 02:43:19

标签: mysql sql

我有以下MySQL代码行:

IF SELECT WEEKDAY(NOW()) > 3 THEN 
    SELECT WEEK(NOW(),1) 
ELSE 
    SELECT WEEK(NOW()) 
END IF;

收到错误。

我需要的是MySQL下一周,如果是DOW > 3则是一年中的周数,如果小于或等于3则是本周。

不要在这里获取语法。

2 个答案:

答案 0 :(得分:0)

SELECT (CASE WHEN WEEKDAY(NOW()) > 3 THEN 
    WEEK(NOW(),1) 
ELSE 
    WEEK(NOW()) END) 
AS result;

答案 1 :(得分:0)

WEEK函数的第二个参数是指示它如何计算周数,即应该将哪一周视为第一个星期,以及它应该从哪个星期开始。

因此,针对您的特定问题使用第二个参数没有意义。如果您想根据某些条件将当前周数增加一,执行,即将1添加到WEEK返回的值:

  • 使用CASE表达式:

    SELECT WEEK(NOW()) + CASE WHEN WEEKDAY(NOW()) > 3 THEN 1 ELSE 0 END
    
  • 使用IF函数(非语句):

    SELECT WEEK(NOW()) + IF(WEEKDAY(NOW()) > 3, 1, 0)
    

您还可以使用MySQL在适当的上下文中将布尔结果自动转换为整数(0表示false,1表示true)的事实,如算术结果,这样就可以了也工作:

SELECT WEEK(NOW()) + (WEEKDAY(NOW()) > 3)

可以说更优雅,但也可能更加模糊。

免责声明:我不知道WEEK(NOW())是否比WEEK(NOW(), 1)或任何其他变体更适合您。您应该检查the function's manual以获取帮助,以确定用于第二个参数的值(或者是否完全指定它),并坚持在所有查询中始终如一地使用它。