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 语法的主要内容,如果未能解决你的问题,请参考以下文章