2011-08-04 18 views
6

Widziałem kilka innych przykładów tego dla SQL, ale szukam szczególnie dla MySQL.MySQL - ostatni dzień w kwartale (najbardziej efektywny sposób)

To jest kod, który mam (który działa, ale myślę, że jest drastycznie nieefektywny). Używam arbitralnej daty "2011-05-15", która powinna i powraca "2011-06-30".

DATE_SUB( 
    DATE_ADD( 
     CONCAT( 
      YEAR(CURDATE()), 
      '-01-01' 
     ), 
     INTERVAL QUARTER('2011-05-15') QUARTER 
    ), 
    INTERVAL 1 DAY 
) 

Jaki jest lepszy sposób to zrobić?

Odpowiedz

7

Ogólnie, wbudowane funkcje w MySQL są bardzo szybkie w porównaniu do innych rzeczy, takich jak operacje na dyskach i pamięciach, więc mają niewielki wpływ na wydajność.

Można prawdopodobnie zaoszczędzić kilka milisekund pozbywając konwersji ciągów:

SELECT MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER - INTERVAL 1 DAY 

ale znowu, nie będę nawet martwić się o takich optymalizacje.

+0

Byłem częściowo zaintrygowany tym, ile funkcji wymagało, kiedy to robiłem, i chciałem pominąć konwersję ciągów znaków - dziękuję, to jest idealne. –

Powiązane problemy