簡體   English   中英

MS SQL Server 查詢日期函數到 MySQL

[英]MS SQL Server Query Date functions to MySQL

我有這個 MS SQL Server 查詢:

SELECT  DATEPART(MONTH, si.score_date),
        MAX(si.score_value)
FROM score_info AS si
WHERE si.score_date >= DATEADD(MONTH, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))
GROUP BY DATEPART(MONTH, si.score_date);

現在我很難將此查詢轉換為 MySQL,尤其是這部分:

DATEADD(MONTH, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))

到目前為止,這是我從 MS SQL Server 查詢轉換為 MySQL 查詢的內容:

DATEPART(MONTH, si.score_date)

EXTRACT(MONTH FROM si.score_date)

請幫助我,因為我正處於學習階段。 非常感謝。

這個 T-SQL 表達式:

DATEADD(MONTH, -3, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))

為您提供 3 個月前的一個月的第一天(截至今天 3 月 30 日,即 12 月 1 日)。

在 MySQL 中,您可以獲得相同的結果,如下所示:

DATE_FORMAT(CURRENT_DATE, '%Y-%m-01') - INTERVAL 3 MONTH

此外, EXTRACT(MONTH FROM si.score_date)可以縮短為MONTH(si.score_date)一下, MONTH()函數存在於 MySQL 和 TSQL 中)。 但請注意,大概您還想保留年份部分,以防您的數據跨越數年。

我會將您的查詢寫為:

SELECT  
    DATE_FORMAT(si.score_date, '%Y-%m-01') year_month,
    MAX(si.score_value) max_score
FROM score_info AS si
WHERE si.score_date >= DATE_FORMAT(CURRENT_DATE, '%Y-%m-01') - INTERVAL 3 MONTH
GROUP BY DATE_FORMAT(si.score_date, '%Y-%m-01'));

暫無
暫無

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

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