2009-07-29 103 views
36

我在使用DAYOFWEEK()函數在MySQL中返回對於星期日。但在我的國家,星期一開始於星期一,而不是星期日。是否有機會從MySQL獲得dayofweek格式,如:(1 - 星期一,2 - 星期二,...)?MySQL DAYOFWEEK() - 我的星期從星期一開始

+0

我知道它可以用一些惡劣的條件來完成。我甚至嘗試模數方法,這在我看來是不工作的(因爲在MySQL中奇怪的Modulo實現)。到目前爲止,沒有任何工作。 – picca 2009-07-29 20:47:15

+1

這是一個mysql錯誤。按照iso標準,週一開始。 http://en.wikipedia.org/wiki/ISO_week_date – woens 2014-06-08 22:31:49

+1

這不是一個錯誤。 `DAYOFWEEK()`使用ODBC標準。 – rgtk 2015-08-31 18:01:28

回答

85

使用WEEKDAY()而不是DAYOFWEEK(),它從星期一開始。

如果您需要從索引1開始,請使用或WEEKDAY() + 1

7

如何減去一個和更改週日

IF(DAYOFWEEK() = 1, 7, DAYOFWEEK() - 1) 

當然,你將不得不爲每個查詢做到這一點。

+1

1 =星期日是ODBC標準,所以它必須在查詢我想。 – 2009-07-29 20:56:03

1

可以寫一個UDF,並採取一個值來告訴它一週中的一天應該是1看起來像這樣(約翰在回答繪製,而不是使用CASE MOD)

DROP FUNCTION IF EXISTS `reporting`.`udfDayOfWeek`; 
DELIMITER | 
CREATE FUNCTION `reporting`.`udfDayOfWeek` (
    _date DATETIME, 
    _firstDay TINYINT 
) RETURNS tinyint(4) 
FUNCTION_BLOCK: BEGIN 
    DECLARE _dayOfWeek, _offset TINYINT; 
    SET _offset = 8 - _firstDay; 
    SET _dayOfWeek = (DAYOFWEEK(_date) + _offset) MOD 7; 
    IF _dayOfWeek = 0 THEN 
    SET _dayOfWeek = 7; 
    END IF; 
    RETURN _dayOfWeek; 
END FUNCTION_BLOCK 

要調用這個函數來給你一週值的當天,當你每週星期二爲實例啓動時,你會打電話:

SELECT udfDayOfWeek(NOW(), 3); 

尼斯件事有它的UDF是你還可以把它上結果集字段是這樣的:

SELECT 
    udfDayOfWeek(p.SignupDate, 3) AS SignupDayOfWeek, 
    p.FirstName, 
    p.LastName 
FROM Profile p; 
14

嘗試使用WEEKDAY()函數。

返回日期的工作日索引(0 =星期一,1 =星期二,... 6 = 星期日)。

相關問題