I MySQL kan du använda DATE_FORMAT()
funktion med %b
formatspecifikation för att returnera det korta månadsnamnet. Du kan till exempel returnera Jan
eller Feb
istället för January
eller February
.
Exempel
SELECT DATE_FORMAT('2035-01-18', '%b');
Resultat:
Jan
Här är ett annat exempel som går igenom de olika månaderna på året:
SELECT
DATE_FORMAT('2035-01-18', '%b') AS "1",
DATE_FORMAT('2035-02-18', '%b') AS "2",
DATE_FORMAT('2035-03-18', '%b') AS "3",
DATE_FORMAT('2035-04-18', '%b') AS "4",
DATE_FORMAT('2035-05-18', '%b') AS "5",
DATE_FORMAT('2035-06-18', '%b') AS "6",
DATE_FORMAT('2035-07-18', '%b') AS "7",
DATE_FORMAT('2035-08-18', '%b') AS "8",
DATE_FORMAT('2035-09-18', '%b') AS "9",
DATE_FORMAT('2035-10-18', '%b') AS "10",
DATE_FORMAT('2035-11-18', '%b') AS "11",
DATE_FORMAT('2035-12-18', '%b') AS "12";
Resultat (med vertikal utdata):
1: Jan 2: Feb 3: Mar 4: Apr 5: May 6: Jun 7: Jul 8: Aug 9: Sep 10: Oct 11: Nov 12: Dec
Du kan returnera andra datum- och tidsenheter också, men den här artikeln handlar om att returnera det korta månadsnamnet.
Se MySQL Date Format Specifiers för en lista över formatspecificerare som kan användas med DATE_FORMAT()
.
Förkorta hela månadens namn
Om du behöver förkorta ett fullständigt månadsnamn kan du alltid använda en funktion som LEFT()
för att bara returnera de tre första tecknen (eller hur många du behöver).
Exempel:
SELECT
DATE_FORMAT('2035-09-18', '%M') AS Full,
LEFT(DATE_FORMAT('2035-09-18', '%M'), 3) AS Short;
Resultat:
+-----------+-------+ | Full | Short | +-----------+-------+ | September | Sep | +-----------+-------+
Vi kan alternativt använda en funktion som CAST()
för att konvertera till en datatyp med endast tre tecken, till exempel detta:
SELECT
DATE_FORMAT('2035-09-18', '%M') AS Full,
CAST(DATE_FORMAT('2035-09-18', '%M') AS CHAR(3)) AS Short;
Resultat:
+-----------+-------+ | Full | Short | +-----------+-------+ | September | Sep | +-----------+-------+ 1 row in set, 1 warning (0.00 sec)
I det här fallet får vi en varning eftersom vi trunkerar ett längre värde:
show warnings;
Resultat:
+---------+------+------------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------------+ | Warning | 1292 | Truncated incorrect CHAR(3) value: 'September' | +---------+------+------------------------------------------------+
Att förkorta månadsnamnet så här kan vara bra när du arbetar med språk som engelska, men tänk på att det kanske inte ger samma resultat som när du använder %b
formatspecifikation.
För att visa vad jag menar, här är vad som händer när jag byter session till att använda det thailändska språket:
SET lc_time_names = 'th_TH';
SELECT
DATE_FORMAT('2023-10-25', '%M') AS Full,
LEFT(DATE_FORMAT('2023-10-25', '%M'), 3) AS Truncated,
DATE_FORMAT('2023-10-25', '%b') AS Short;
Resultat:
+--------------------+-----------+----------+ | Full | Truncated | Short | +--------------------+-----------+----------+ | ตุลาคม | ตุล | ต.ค. | +--------------------+-----------+----------+
Att trunkera hela månadsnamnet ger ett annat resultat än att använda %b
formatspecifikation för att returnera det korta månadsnamnet.