在我的 PHP 代码中,我使用 date("N") ISO-8601 数字表示一周中的第 1 天(周一)到 7(周日)。
现在,当我想进行查询以搜索特定日期时。
我在 MySQL 中发现:
使用%w的date_format将返回 (0=Sunday..6=Saturday)
DAYOFWEEK(date)将返回 (1 = Sunday .. 7=Saturday)
有没有一种快速的方法来解决这个问题而不做一些 PHP?
在我的 PHP 代码中,我使用 date("N") ISO-8601 数字表示一周中的第 1 天(周一)到 7(周日)。
现在,当我想进行查询以搜索特定日期时。
我在 MySQL 中发现:
使用%w的date_format将返回 (0=Sunday..6=Saturday)
DAYOFWEEK(date)将返回 (1 = Sunday .. 7=Saturday)
有没有一种快速的方法来解决这个问题而不做一些 PHP?
SELECT (DAYOFWEEK(column)+6)%7 as phpdaten FROM ...
正如评论中所说:
减去或添加一个(对 PHP 或对您的 MySQL 查询)。
试图匹配...
PHP日期('N'): 周一 周二 周三 周四 周五 周六 周日 1 2 3 4 5 6 7
对于其中之一...
MySQL DATE_FORMAT(col, '%w'): 周一 周二 周三 周四 周五 周六 周日 1 2 3 4 5 6 0 MySQL DAYOFWEEK(col): 周一 周二 周三 周四 周五 周六 周日 2 3 4 5 6 7 1
我会使用一个CASE
声明,DATE_FORMAT
因为你只需要担心星期天。
SELECT
CASE
WHEN DATE_FORMAT(col, '%w') = 0
THEN 7
ELSE DATE_FORMAT(col, '%w')
END AS dayofweek
...
令我惊讶的是没有人使用 mysql WEEKDAY
。在ISO -8601中,一周从星期一开始。
平日(日期)
返回日期的工作日索引(0 = 星期一,1 = 星期二,... 6 = 星期日)。
DAYOFWEEK(日期)
返回日期的工作日索引(1 = 星期日,2 = 星期一,...,7 = 星期六)。
mysql PHP result
WEEKDAY(date) == date('N' , timestamp) - 1 0: Monday, 1: Tuesday, … 6: Sunday
WEEKDAY(date) + 1 == date('N' , timestamp) 1: Monday, 2: Tuesday, … 7: Sunday
DAYOFWEEK(date) -1 == date('w' , timestamp) 0: Sunday, 1: Monday, … 6: Saturday
DAYOFWEEK(date) == date('w' , timestamp) + 1 1: Sunday, 2: Monday, … 7: Saturday
例如,对于当前日期,您可以选择一周的第一天,如下所示:
SELECT DATE_SUB(now(), INTERVAL
IF (DATE_FORMAT(now(), '%w') -1 = -1,
DATE_FORMAT(now(), '%w') + 6,
DATE_FORMAT(now(), '%w') -1) DAY) FIRST_DAY,
now();