簡體   English   中英

根據mySQL中第一年的第一天將年,周轉換為日期

[英]Convert year, week into date based on year's first day in mySQL

我將所有星期的銷售額匯總到一個對象中,並且對象需要顯示在圖表中,並且所有圖表都需要在x軸上顯示日期,因此,在這里,我基於周一計算年+周的日期

SELECT STR_TO_DATE(CONCAT('20131',' Monday'), '%X%V %W');

我要根據一年的第一天

SELECT DAYNAME(MAKEDATE(2013,1))

全聚在一起

SELECT STR_TO_DATE(CONCAT(CONCAT(2013, 1), DAYNAME(MAKEDATE(2013,1))), '%X%V %W')

返回'2013-01-08'這是錯誤的值,我需要'2013-01-01'

SELECT STR_TO_DATE(CONCAT(CONCAT(2017, 1), DAYNAME(MAKEDATE(2017,1))), '%X%V %W')

在這里它返回“ 2017-01-01”,這很好

我的問題是幾年來一直到下周,這很糟糕,我不確定我在哪里和做錯了什么。所以請任何幫助...

問題:

在像2013年這樣的年份中,當我將year + week轉換為date時,我會在一個額外的星期中獲得日期,例如2013year + 1week給2013-01-08,這是第二周而不是第一周

在像2017年這樣的年份中,當我將year +周轉換為日期時,我會在正確的周中獲得日期,例如2017year + 1week給2017-01-01

為什么會這樣呢?

MySQL支持間隔,這似乎是從年和周的數字創建日期的最佳功能。 請參閱以下查詢作為示例,該示例計算2013年的第一周和2013年的第二周。

SELECT DATE_ADD(makedate(`year`, 1), INTERVAL (`week` - 1) WEEK) as weekdate
FROM (
   (SELECT 2013 as `year`, 1 as `week`) UNION 
   (SELECT 2013 as `year`, 2 as `week`)
) t1

輸出是兩行

weekdate
2013-01-01
2013-01-08

以下內容也可以使用,但不太容易閱讀

SELECT MAKEDATE(`year`, 1 + ((`week` - 1) * 7)) as weekdate 
FROM (
    (SELECT 2013 as `year`, 1 as `week`) UNION 
    (SELECT 2013 as `year`, 2 as `week`)
) t1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM