WEEK 的正确 MySQL 语法

Posted

技术标签:

【中文标题】WEEK 的正确 MySQL 语法【英文标题】:Correct MySQL Syntax for WEEK 【发布时间】:2013-10-14 02:43:19 【问题描述】:

我有以下 mysql 代码行:

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

然后出现错误。

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

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

【问题讨论】:

“并且出现错误。” --- 我们应该猜你的错误吗? @zerkms:废话,我们应该牢记所有错误及其可能的上下文。 ;) 【参考方案1】:
SELECT (CASE WHEN WEEKDAY(NOW()) > 3 THEN 
    WEEK(NOW(),1) 
ELSE 
    WEEK(NOW()) END) 
AS result;

【讨论】:

【参考方案2】:

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 在适当的上下文中自动将布尔结果转换为整数(false 为 0,true 为 1)这一事实,因此这也可以工作:

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

可以说更优雅,但也可能更晦涩。

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

【讨论】:

感谢您提供的信息,这让我继续前进!

以上是关于WEEK 的正确 MySQL 语法的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 常用函数(34)- week 函数

Mysql 常用函数(34)- week 函数

语法错误或访问冲突:1064 您的 SQL 语法有错误;对应于正确语法的 MySQL 服务器版本

MYSQL语法不正确[重复]

mySQL 用户定义函数中 set 命令的正确语法是啥?

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法