2017-03-06 60 views
0

我有一個問題,我不能使功能WEEK(日期,模式)工作。MySql當使用函數WEEK()與模式時返回錯誤

我有一個SQL我在哪裏分組通過一年的款項,然後以周:

SELECT SUM(o.total) as total_org, SUM(o.total_eur) as total_eur, 
WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)) as period, YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)) as smallerperiod, `s`.`domain` 
FROM `orders` `o` 
JOIN `shops` `s` ON `o`.`domain_id` = `s`.`id` 
WHERE `o`.`domain_id` = '5' 
GROUP BY YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)), WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)) 
ORDER BY `smallerperiod` ASC, `period` ASC 

正是作品我多麼希望除了週數從0開始,我發現了該模式,將工作最適合我的是3號,所以我試圖改變我的SQL語句:

SELECT SUM(o.total) as total_org, SUM(o.total_eur) as total_eur, 
WEEK('DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)', 3) as period, YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)) as smallerperiod, `s`.`domain` 
FROM `orders` `o` 
JOIN `shops` `s` ON `o`.`domain_id` = `s`.`id` 
WHERE `o`.`domain_id` = '5' 
GROUP BY YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)), WEEK('DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)', 3)) 
ORDER BY `smallerperiod` ASC, `period` ASC 

然而,它只是給了我的錯誤

你的SQL語法有錯誤;檢查對應於您MariaDB的服務器版本正確的語法使用 接近「)ORDER BY smallerperiod ASC手冊,period ASC

編輯: 我試圖使它沒有單引號工作過:

SELECT SUM(o.total) as total_org, SUM(o.total_eur) as total_eur, 
WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR), 3) as period, YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)) as smallerperiod, `s`.`domain` 
FROM `orders` `o` 
JOIN `shops` `s` ON `o`.`domain_id` = `s`.`id` 
WHERE `o`.`domain_id` = '5' 
GROUP BY YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)), WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR), 3)) 
ORDER BY `smallerperiod` ASC, `period` ASC 

但是,它返回我同樣的錯誤

+1

這裏刪除引號:'「DATE_ADD(o.date_created_utc,間隔0 HOUR)」' – Jens

+0

事實上,我有,但它改變不了什麼,我得到了同樣的錯誤使用引號或沒有。 – NeuTronas

+2

你在這裏有一個額外的括號:'HOUR)',3))' – Jens

回答

1

,因爲你要調用一個funtion,而不是把它作爲一個字符串,你必須刪除單引號角落找尋'DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)'

你得到theeroor,監守你有一個額外的支架位置:HOUR)', 3))

所以查詢必須是:

SELECT SUM(o.total) as total_org, SUM(o.total_eur) as total_eur, 
WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR), 3) as period, YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)) as smallerperiod, `s`.`domain` 
FROM `orders` `o` 
JOIN `shops` `s` ON `o`.`domain_id` = `s`.`id` 
WHERE `o`.`domain_id` = '5' 
GROUP BY YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)), WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR), 3) 
ORDER BY `smallerperiod` ASC, `period` ASC 
0

你只需要後​​。否則寄託都完美我刪除,去年支架曾嘗試過。 你也可以嘗試下面的代碼。

SELECT SUM(o.total) as total_org, SUM(o.total_eur) as total_eur, 
    WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR), 3) as period, YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)) as smallerperiod, `s`.`domain` 
    FROM `orders` `o` 
    JOIN `shops` `s` ON `o`.`domain_id` = `s`.`id` 
    WHERE `o`.`domain_id` = '5' 
    GROUP BY 
    YEAR(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR)), 
    WEEK(DATE_ADD(o.date_created_utc, INTERVAL 0 HOUR), 3) 
    ORDER BY `smallerperiod` ASC, `period` ASC