MySQL MONTH () dazu bringen, führende Nullen zu verwenden?


91

Wie spezifiziere ich für die MONTH () - Funktion von mySQL, dass in dieser Abfrage '08' anstelle von 8 zurückgegeben wird?

Ich möchte, dass die Sortierung datumsmäßig funktioniert. Derzeit erhalten Ergebnisse für Datum wie

2006-9
2007-1
2007-10
2007-11

aktuelle Abfrage:

SELECT COUNT(*), CONCAT(YEAR(`datetime_added`), '-', MONTH(`datetime_added`)) as date FROM `person` WHERE (email = '' OR email IS NULL) 
GROUP BY date 
ORDER BY date ASC

Antworten:


204

Verwenden Sie stattdessen Folgendes:

DATE_FORMAT(`datetime_added`,'%Y-%m')

Erläuterung:

DATE_FORMAT()Mit dieser Funktion können Sie das Datum beliebig formatieren, indem Sie die in der folgenden Tabelle beschriebenen Bezeichner verwenden (wörtlich aus der Dokumentation entnommen ). Eine Formatzeichenfolge '%Y-%m'bedeutet also: "Ein ganzes Jahr (4 Ziffern), gefolgt von einem Bindestrich ( -), gefolgt von einer zweistelligen Monatszahl".

Beachten Sie, dass Sie die Sprache für Tag- / Monatsnamen angeben können, indem Sie die lc_time_namesSystemvariable festlegen . Extrem nützlich. Weitere Informationen finden Sie in der Dokumentation .

Specifier   Description
%a  Abbreviated weekday name (Sun..Sat)
%b  Abbreviated month name (Jan..Dec)
%c  Month, numeric (0..12)
%D  Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
%d  Day of the month, numeric (00..31)
%e  Day of the month, numeric (0..31)
%f  Microseconds (000000..999999)
%H  Hour (00..23)
%h  Hour (01..12)
%I  Hour (01..12)
%i  Minutes, numeric (00..59)
%j  Day of year (001..366)
%k  Hour (0..23)
%l  Hour (1..12)
%M  Month name (January..December)
%m  Month, numeric (00..12)
%p  AM or PM
%r  Time, 12-hour (hh:mm:ss followed by AM or PM)
%S  Seconds (00..59)
%s  Seconds (00..59)
%T  Time, 24-hour (hh:mm:ss)
%U  Week (00..53), where Sunday is the first day of the week
%u  Week (00..53), where Monday is the first day of the week
%V  Week (01..53), where Sunday is the first day of the week; used with %X
%v  Week (01..53), where Monday is the first day of the week; used with %x
%W  Weekday name (Sunday..Saturday)
%w  Day of the week (0=Sunday..6=Saturday)
%X  Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x  Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%Y  Year, numeric, four digits
%y  Year, numeric (two digits)
%%  A literal “%” character
%x  x, for any x not listed above 

8
Obwohl dies nicht das ist, was er gefragt hat, scheint dies zu beantworten, was er hätte fragen sollen.
Jeremy Holovacs

Warum kann der Tag des Monats 0 sein?
SOFe

Weil 0000-00-00 ein gültiges Datum ist (abhängig von den Einstellungen)
Mchl

2
@SOFe> Bereiche für die Monats- und Tagesspezifizierer beginnen mit Null, da MySQL das Speichern unvollständiger Daten wie '2014-00-00' ermöglicht. dev.mysql.com/doc/refman/5.6/en/…
kio21

Genial, hat wie ein Zauber funktioniert :)
Mizo Games

30

Sie können Polster wie verwenden

SELECT
    COUNT(*), 
    CONCAT(YEAR(`datetime_added`), '-', LPAD(MONTH(`datetime_added`), 2, '0')) as date 
FROM `person` 
WHERE (email = '' OR email IS NULL) 
GROUP BY date 
ORDER BY date ASC

Erfüllte das Bedürfnis im Bienenstock. Die Funktion DATE_FORMAT () wird in Hive nicht unterstützt. Ihre Antwort hilft.
Guangtong Shen


4

MONTH () gibt eine ganze Zahl zurück, daher gibt es natürlich keine führende Null. Sie müssen es in eine Zeichenfolge konvertieren, die '0' mit der linken Maustaste auffüllen und die letzten 2 Zeichen übernehmen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.