Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Converter um nome de mês para o número do mês no SQL Server (T-SQL)


No SQL Server, você pode usar o MONTH() função para converter um nome de mês para seu número correspondente.

Exemplo


Aqui está um exemplo de conversão de um nome de mês para o número do mês.
SELECT MONTH('September' + '1,1');

Resultado:
9

O que estou fazendo aqui é basicamente fabricar uma “data” (que inclui meu mês especificado) para que o SQL Server não gere um erro ao usar o MONTH() função sem uma data válida.

Esta função aceita qualquer expressão que possa ser resolvida em um tempo , data , pequena data e hora , datahora , datahora2 , ou deslocamento de data e hora valor. Pode ser uma expressão, expressão de coluna, variável definida pelo usuário ou literal de string.

Mais "Encontro"


Você também pode fornecer um argumento mais “semelhante a uma data” fazendo algo assim:
SELECT MONTH('September' + ' 01, 1900');

Resultado:
9

Dia e ano atuais


Ou se preferir usar o dia e ano atuais, você pode fazer algo assim:
SELECT MONTH('September' + FORMAT(GETDATE(), 'd,y'));

Resultado:
9

Só para ficar claro, a menos que o mês especificado seja o mesmo que o mês atual, você terminará com uma data diferente da data atual.

Aqui está um exemplo para ilustrar o que quero dizer:
SELECT 
  FORMAT(GETDATE(), 'MMMM d, yyyy') AS [Today],
  'September' + FORMAT(GETDATE(), ' d, yyyy') AS [Modified],
  MONTH('September' + FORMAT(GETDATE(), ' d, yyyy')) AS [Month Number];

Resultado:
 +----------------+--------------------+----------------+
 | Today          | Modified           | Month Number   |
 |----------------+--------------------+----------------|
 | March 22, 2020 | September 22, 2020 | 9              |
 +----------------+--------------------+----------------+ 

Executei esta consulta em 22 de março de 2020, mas a data modificada é 22 de setembro de 2020.

Independentemente disso, o número correto do mês é retornado quando usamos MONTH() .