SORU
14 Kasım 2009, CUMARTESİ


Nasıl MySQL hafta grup için?

Oracle tablo sunucusu yerleşik bir işlev, TRUNC(timestamp,'DY') bulunmaktadır. Bu işlev, önceki Pazar günü gece yarısına kadar herhangi bir zaman damgası dönüştürür. MySQL bunu yapmak için en iyi yolu nedir?

Oracle da TRUNC(timestamp,'MM') oluşur, ayın ilk günü gece yarısına kadar bir zaman damgası dönüştürmek için sunmaktadır. MySQL, bu basittir:

TIMESTAMP(DATE_FORMAT(timestamp, '%Y-%m-01'))

Ama DATE_FORMAT Bu hile haftadır işe yaramaz. WEEK(timestamp) işlevi farkındayım, ama gerçekten hafta sayısı yıl içinde istemiyorum; bu şeyler çok yıllı iş için.

CEVAP
14 Kasım 2009, CUMARTESİ


YIL(zaman damgası) ve HAFTA(zaman damgası) kullanın, ve madde İLE SEÇİN bu ifadeler ve GRUP her ikisini de kullanabilirsiniz.

Aşırı şık ama işlevsel...

Ve tabii ki tek bir ifadede bu iki tarih bölümleri, yani bir şey gibi . de birleştirebilirsiniz

SELECT CONCAT(YEAR(timestamp), '/', WEEK(timestamp)), etc...
FROM ...
WHERE ..
GROUP BY CONCAT(YEAR(timestamp), '/', WEEK(timestamp))

EditMartin xx de YEARWEEK kullanabilirsiniz çıkış noktaları gibi) çıktısı uzun formülü yukarıdaki gibi göz dostu olmasa da işlevi.

2 düzenleyin[3 1/2 yıl sonra!]:
İsteğe bağlı ikinci bir parametre (mode) 0 ya da 2 YEARWEEK() muhtemelen toplu için en iyi yoldurtamamlayınhafta (yani Ocak üzerinde çifte hangi hafta da dahil olmak üzere, 1), Eğer bu istenen bir şeydir. YIL() / HAFTA() yaklaşım başlangıçta önerilen bu cevabı nasıl etkilediğini bölme toplanan veriler için, bu tür "yumulmuş" haftada iki: bir eski yıl, yeni yıl.
Düzgün, her yıl, iki kısmi bir hafta olması pahasına, her iki uçta birer tane, genellikle muhasebe vb isteniyorsa. ve bu YIL için() / HAFTA() yaklaşım daha iyi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • manadude21

    manadude21

    11 Mart 2008
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011