Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter o nome curto do mês de uma data no MySQL


No MySQL, você pode usar o DATE_FORMAT() função com o %b especificador de formato para retornar o nome curto do mês. Por exemplo, você pode retornar Jan ou Feb em vez de January ou Feb .

Exemplo

SELECT DATE_FORMAT('2035-01-18', '%b');

Resultado:
Jan

Aqui está outro exemplo que percorre os vários meses do ano:
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";

Resultado (usando saída vertical):
 1: Jan
 2: Feb
 3: Mar
 4: Apr
 5: May
 6: Jun
 7: Jul
 8: Aug
 9: Sep
10: Oct
11: Nov
12: Dec

Você também pode retornar outras unidades de data e hora, mas este artigo é sobre como retornar o nome curto do mês.

Veja MySQL Date Format Specifiers para uma lista de especificadores de formato que podem ser usados ​​com DATE_FORMAT() .

Encurtar o nome completo do mês


Se você precisar encurtar um nome de mês completo, sempre poderá usar uma função como LEFT() para retornar apenas os três primeiros caracteres (ou quantos você precisar).

Exemplo:
SELECT 
    DATE_FORMAT('2035-09-18', '%M') AS Full,
    LEFT(DATE_FORMAT('2035-09-18', '%M'), 3) AS Short;

Resultado:
+-----------+-------+
| Full      | Short |
+-----------+-------+
| September | Sep   |
+-----------+-------+

Alternativamente, poderíamos usar uma função como CAST() para converter para um tipo de dados com apenas três caracteres, como este:
SELECT 
    DATE_FORMAT('2035-09-18', '%M') AS Full,
    CAST(DATE_FORMAT('2035-09-18', '%M') AS CHAR(3)) AS Short;

Resultado:
+-----------+-------+
| Full      | Short |
+-----------+-------+
| September | Sep   |
+-----------+-------+
1 row in set, 1 warning (0.00 sec)

Nesse caso, recebemos um aviso porque estamos truncando um valor mais longo:
show warnings;

Resultado:
+---------+------+------------------------------------------------+
| Level   | Code | Message                                        |
+---------+------+------------------------------------------------+
| Warning | 1292 | Truncated incorrect CHAR(3) value: 'September' |
+---------+------+------------------------------------------------+

Encurtar o nome do mês como este pode ser bom ao trabalhar com idiomas como o inglês, mas lembre-se de que isso pode não retornar o mesmo resultado ao usar o %b especificador de formato.

Para demonstrar o que quero dizer, aqui está o que acontece quando mudo minha sessão para usar o idioma tailandês:
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;

Resultado:
+--------------------+-----------+----------+
| Full               | Truncated | Short    |
+--------------------+-----------+----------+
| ตุลาคม             | ตุล        | ต.ค.     |
+--------------------+-----------+----------+

Truncar o nome completo do mês retorna um resultado diferente de usar o %b especificador de formato para retornar o nome curto do mês.