2

在我的 PHP 代码中,我使用 date("N") ISO-8601 数字表示一周中的第 1 天(周一)到 7(周日)。

现在,当我想进行查询以搜索特定日期时。

我在 MySQL 中发现:

  • 使用%wdate_format将返回 (0=Sunday..6=Saturday)

  • DAYOFWEEK(date)将返回 (1 = Sunday .. 7=Saturday)

有没有一种快速的方法来解决这个问题而不做一些 PHP

4

5 回答 5

2
SELECT (DAYOFWEEK(column)+6)%7 as phpdaten FROM ...
于 2013-06-01T10:25:19.423 回答
2

正如评论中所说

减去或添加一个(对 PHP 或对您的 MySQL 查询)。

于 2012-11-08T18:39:28.073 回答
2

试图匹配...

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
...
于 2012-11-08T18:46:18.540 回答
0

令我惊讶的是没有人使用 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
于 2018-05-22T09:41:50.440 回答
0

例如,对于当前日期,您可以选择一周的第一天,如下所示:

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();
于 2015-12-08T15:09:15.780 回答