2013-12-21 4 views
1

Я преобразовал следующий запрос MS-SQL Server в MySQL, и я застрял в этой части даты. Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю неправильно?Преобразование из запроса MS-SQL Server в MySQL и DATEDIFF()

Оригинал MS-SQL Query (рабочий)

select top 4 
    [Mon]=sum(case when datename(weekday, vrdate) = 'Monday' then namount else 0 end), 
    [Tue]=sum(case when datename(weekday, vrdate) = 'Tuesday' then namount else 0 end), 
    [Wed]=sum(case when datename(weekday, vrdate) = 'Wednesday' then namount else 0 end), 
    [Thu]=sum(case when datename(weekday, vrdate) = 'Thursday' then namount else 0 end), 
    [Fri]=sum(case when datename(weekday, vrdate) = 'Friday' then namount else 0 end), 
    [Sat]=sum(case when datename(weekday, vrdate) = 'Saturday' then namount else 0 end), 
    [Sun]=sum(case when datename(weekday, vrdate) = 'Sunday' then namount else 0 end) 
from stockmain 
where etype = 'sale' and DATEDIFF(MONTH, vrdate, getDate()) = 0 
group by datepart(week, vrdate) 
order by datepart(week, vrdate) ; 

Соответствующие MySQL Query (не работает)

Ниже соответствующий MySQL Query и я застрял на DATEDIFF в WHERE пункте ,

select 
     sum(case when date_format(vrdate, '%W') = 'Monday' then namount else 0 end) as 'Mon', 
     sum(case when date_format(vrdate, '%W') = 'Tuesday' then namount else 0 end) as 'Tue', 
     sum(case when date_format(vrdate, '%W') = 'Wednesday' then namount else 0 end) as 'Wed', 
     sum(case when date_format(vrdate, '%W') = 'Thursday' then namount else 0 end) as 'Thu', 
     sum(case when date_format(vrdate, '%W') = 'Friday' then namount else 0 end) as 'Fri', 
     sum(case when date_format(vrdate, '%W') = 'Saturday' then namount else 0 end) as 'Sat', 
     sum(case when date_format(vrdate, '%W') = 'Sunday' then namount else 0 end) as 'Sun' 
from stockmain 
where etype = 'sale' and DATEDIFF(MONTH, vrdate, CURDATE()) = 0 
group by WEEK(VRDATE) 
order by WEEK(VRDATE) desc 
LIMIT 4 

ответ

3

для MySQL эквивалент, как datediff работает на SQL Server является timestampdiff.

WHERE TIMESTAMPDIFF(month, vrdate, curdate()) = 0 

Следующие действия могут быть эквивалентны, в зависимости от того, как datediff раундов за месяц до его расчета:

WHERE MONTH(vrdate) = MONTH(CURDATE()) 
+0

+1. Спасибо за эквивалент :-) –

+0

Я просто размышлял, действительно ли это эквивалентно - я думаю, что это не так, но у меня нет программного обеспечения под рукой сейчас, чтобы проверить. Однако timestampdiff должен работать нормально. –

+0

Оба дали тот же результат. Я пойду со вторым. –