-5

我有以下 MySQL 代码行:

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

并得到错误。

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

只是没有在这里获得语法。

4

2 回答 2

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)任何其他变体更适合您。您应该查看函数手册以获取帮助来决定将哪个值用于第二个参数(或者是否完全指定它),并坚持在所有查询中始终如一地使用它。

于 2013-10-14T10:10:53.437 回答
0
SELECT (CASE WHEN WEEKDAY(NOW()) > 3 THEN 
    WEEK(NOW(),1) 
ELSE 
    WEEK(NOW()) END) 
AS result;
于 2013-10-14T02:51:04.833 回答