Here are three ways to return the month name from a date in MariaDB.
The MONTHNAME() Function
The MONTHNAME() function is designed specifically for returning the month name from a date. To do this, pass the date to the function when calling it. The full month name will be returned.
Example:
SELECT MONTHNAME('2021-08-19');
Result:
+-------------------------+
| MONTHNAME('2021-08-19') |
+-------------------------+
| August |
+-------------------------+
The language used for the month name is controlled by the value of the lc_time_names system variable. See MONTHNAME() for an example of how this affects the output.
The DATE_FORMAT() Function
The DATE_FORMAT() function formats a given date into a specified format. You specify the date and the format when you call the function.
You can return the full month name by passing %M as the format string.
Example:
SELECT DATE_FORMAT('2021-08-19', '%M');
Result:
+---------------------------------+
| DATE_FORMAT('2021-08-19', '%M') |
+---------------------------------+
| August |
+---------------------------------+
As with MONTHNAME(), the language used for the month name is controlled by the value of the lc_time_names system variable. However, the DATE_FORMAT() function accepts an optional third argument that allows you to specify the locale.
Here’s an example of specifying a locale:
SELECT DATE_FORMAT('2021-08-19', '%M', 'ca_ES');
Result:
+------------------------------------------+
| DATE_FORMAT('2021-08-19', '%M', 'ca_ES') |
+------------------------------------------+
| agost |
+------------------------------------------+
Short Month Name
Passing %b to the DATE_FORMAT() function returns the short month name.
Example:
SELECT DATE_FORMAT('2021-08-19', '%b');
Result:
+---------------------------------+
| DATE_FORMAT('2021-08-19', '%b') |
+---------------------------------+
| Aug |
+---------------------------------+
This could be replicated with the MONTHNAME() function by using LEFT() to grab the first 3 characters from the month name.
Example:
SELECT LEFT(MONTHNAME('2021-08-19'), 3);
Result:
+----------------------------------+
| LEFT(MONTHNAME('2021-08-19'), 3) |
+----------------------------------+
| Aug |
+----------------------------------+
The same concept could be achieved by converting the result of MONTHNAME() to a three character data type with a function like CAST().
However, while this approach works in en_US, it might not always work in other languages. For example:
SET lc_time_names = 'th_TH';
SELECT
DATE_FORMAT('2021-08-19', '%b') AS "Short 1",
LEFT(MONTHNAME('2021-08-19'), 3) AS "Short 2",
MONTHNAME('2021-08-19') AS "Full";
Result:
+----------+-----------+-----------------------+ | Short 1 | Short 2 | Full | +----------+-----------+-----------------------+ | ส.ค. | สิง | สิงหาคม | +----------+-----------+-----------------------+