我有以下 MySQL 代码行:
IF SELECT WEEKDAY(NOW()) > 3 THEN
SELECT WEEK(NOW(),1)
ELSE
SELECT WEEK(NOW())
END IF;
并得到错误。
我需要的是让 MySQL 下周拉,按一年中的周数,如果DOW > 3
和本周小于或等于 3。
只是没有在这里获得语法。
该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)
任何其他变体更适合您。您应该查看函数手册以获取帮助来决定将哪个值用于第二个参数(或者是否完全指定它),并坚持在所有查询中始终如一地使用它。
SELECT (CASE WHEN WEEKDAY(NOW()) > 3 THEN
WEEK(NOW(),1)
ELSE
WEEK(NOW()) END)
AS result;