2014-09-18 97 views
2

如果您只有MySQL的星期幾,星期數,月和年,有某種方法可以獲取日期?以星期,星期數,月和年獲取日期

例子:

我想知道這一天是這個參數:

  • 年時間:2014年
  • 月:Setember(09)
  • 年的週數:37或週數量在9月:3
  • 星期幾:星期四

答案是「2014-09-18」

+1

他們是如何保存在你的MySQL數據庫? – AndreDuarte 2014-09-18 17:58:38

+0

所有的日期函數都在這裏:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html沒有內置的函數可以做到這一點,但你可以計算它通過'date_add( -01-01,INTERVAL WEEKS)開始' – Barmar 2014-09-18 18:01:31

+0

其實我按照星期編號進行了一個查詢分組,並且按星期與列分隔,但現在我需要在Mysql中顯示類似日曆的內容,顯示日子本身。 – brunodotcom 2014-09-18 18:19:39

回答

0

我問了同樣的問題,在葡萄牙斯托克溢出,他們找到了一個簡單的解決方案。

使用str_to_date,年,星期數和星期幾。

%Y Year, numeric, four digits 
%U Week (00..53), where Sunday is the first day of the week 
%W Weekday name (Sunday..Saturday) 

SELECT str_to_date('201437 Thursday', '%Y%U %W'); 

結果:

2014-09-18 00:00:00 

葡萄牙堆棧溢出答案鏈接:https://pt.stackoverflow.com/questions/33046/obter-data-com-dia-da-semana-n%C3%BAmero-da-semana-m%C3%AAs-e-ano/33063#33063

感謝大家誰幫我

0

使用Barmars建議你可以建立在運行一年的日曆,並檢查其對你的約束條件有關:

SET @year := 2014;  -- set the year of the constraints 
SET @week := 37;  --  the week 
SET @day_of_week := 5; --  the day of the week (numerical) 

-- build the first of the wanted year as supposed by Barmar 
SET @first_of_year = STR_TO_DATE(CONCAT(@year, '-01-01'), '%Y-%m-%d'); 

SELECT 
    @first_of_year + INTERVAL t.n DAY the_date 
FROM (
    SELECT 
     a.N + b.N * 10 + c.N * 100 AS n 
    FROM 
     (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
     ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
     ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) c 
    ORDER BY n 
) t 
WHERE 
    t.n < TIMESTAMPDIFF(DAY, @first_of_year, @first_of_year + INTERVAL 1 YEAR) 
AND 
    WEEK(@first_of_year + INTERVAL t.n DAY) = @week 
AND 
    DAYOFWEEK(@first_of_year + INTERVAL t.n DAY) = @day_of_week 
; 

Demo

注意
UNION生成從0到399的數字,所以我們可以生成一年的日曆。現在我們可以應用您的其他約束,比如每週和每週的一週。

+0

我在這裏測試,工作正常,但我找到了其他方式。非常感謝你! – brunodotcom 2014-09-18 19:41:22