我有以下MySQL代码行:
IF SELECT WEEKDAY(NOW()) > 3 THEN
SELECT WEEK(NOW(),1)
ELSE
SELECT WEEK(NOW())
END IF;
收到错误。
我需要的是MySQL下一周,如果是DOW > 3
则是一年中的周数,如果小于或等于3则是本周。
不要在这里获取语法。
答案 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以获取帮助,以确定用于第二个参数的值(或者是否完全指定它),并坚持在所有查询中始终如一地使用它。