Obtendo apenas Mês e Ano do SQL DATE


Respostas:


170

Além das sugestões já dadas, há outra possibilidade que posso deduzir da sua pergunta:
- Você ainda quer que o resultado seja uma data
- Mas você quer 'descartar' os dias, horas, etc.
- Partindo de um ano / mês somente campo de data

SELECT
   DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
FROM
   <your_table>

Isso obtém o número de meses inteiros a partir de uma data base (0) e os adiciona a essa data base. Arredondando para baixo até o mês em que a data está.

NOTA: No SQL Server 2008, você ainda terá o TIME anexado como 00: 00: 00.000. Isso não é exatamente o mesmo que "remover" qualquer notação de dia e hora. Também o DIA foi definido como o primeiro. por exemplo, 2009-10-01 00: 00: 00.000


1
Isso não funcionou para mim. Dá-me 2023-02-01 00: 00: 00.000 como resultado.
— DSS

1
@dss - com quais parâmetros? Mostre o SQL real e estou feliz em dar uma olhada.
— MatBailie

@MatBailie SELECT DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products where productID = 123 A coluna "LastSaleDate" é declarada como "(data e hora, não nula)" e recebo: 2014-09-01 00: 00: 00.000
— Dss

1
@DSS - Sim, isso parece estar correto. Está chegando ao início de setembro de 2014. Não há um tipo de dados "Somente ano e mês", portanto, usar o primeiro momento de cada mês é a prática padrão. Ao converter esse valor DATETIME em uma sequência de caracteres (Camada de aplicação, Camada de apresentação, Camada de relatório etc.), você sempre pode optar por formatá-lo com apenas as partes do ano e do mês. Mas em termos de manipulação de dados "no banco de dados", isso está correto.
— precisa saber é o seguinte

Acho que talvez porque sua resposta tenha sido usada com um campo "Data", mas estou usando um campo "data e hora", então esse é provavelmente o problema.
— DSS

133
select month(dateField), year(dateField)

2
ótimo! Você pode conectá-los a uma coluna: 'selecione conversão (mês (dateField) como varchar) +'. ' + elenco (ano (dateField) como varchar) '
— izik f /


32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)

2
SELECT DATEPART (MM, DateVal) não está retornando 'MM'. Está retornando apenas um dígito se o mês estiver entre 1 e 9.
— Jaikrat

Em vez de "MM" deve dizer "mês": 'SELECT DATEPART (mês, getdate ())'
— Renne007

17
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear

a saída será semelhante a: 'dezembro de 2013'


15

Existem duas funções SQL para fazer isso:

Consulte a documentação vinculada para obter detalhes.


5
Eu sugiro colocar pelo menos alguns exemplos breves, porque os links nem sempre ficam para sempre ... Na verdade, eles não são mais bons.
— Carol

12

Isso pode ser útil também.

SELECT YEAR(0), MONTH(0), DAY(0);

ou

SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());

ou

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);

Enfim, para não remover o "0" no campo de retorno?
— precisa saber é

11

vamos escrever assim: YEAR(anySqlDate)e MONTH(anySqlDate). Experimente com YEAR(GETDATE())por exemplo.


10
convert(varchar(7), <date_field>, 120)
because 120 results in 'yyyy-MM-dd' which is varchar(10)
using varchar(7) will display only year and month

example:
select convert(varchar(7), <date_field>, 120), COUNT(*)
from <some_table>
group by convert(varchar(7), <date_field>, 120)
order by 1

6

Estou interpretando sua pergunta de duas maneiras.

a) Você só precisa de um mês e um ano separadamente; nesse caso, aqui está a resposta

select 
        [YEAR] = YEAR(getdate())
        ,[YEAR] = DATEPART(YY,getdate())
        , [MONTH] = month(getdate())
        ,[MONTH] = DATEPART(mm,getdate())
        ,[MONTH NAME] = DATENAME(mm, getdate()) 

b)

Você deseja exibir a partir de uma determinada data, digamos '2009-11-24 09:01:55.483'no formato MONTH.YEAR . Portanto, a saída deve ocorrer como 11.2009neste caso.

Se for esse o caso, tente isso (entre outras alternativas)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')

5

Alguns bancos de dados, como podem MS ACCESSou RODBCnão suportar as SQL SERVERfunções, mas para qualquer banco de dados que tenha a FORMATfunção, você pode simplesmente fazer isso:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>


3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

fornece, por exemplo, 201601 se você deseja um resultado de seis dígitos


2

Tente isto

select to_char(DATEFIELD,'MON') from YOUR_TABLE

por exemplo.

select to_char(sysdate, 'MON') from dual

2

Tente o seguinte:

Português

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)

Resultado: maio 2019


Inglês

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)

Resultado: maio de 2019

Se você quiser em outro idioma, altere ' pt-pt ' ou ' en-US ' para qualquer um deles no link


1

Eu tinha um requisito específico para fazer algo semelhante, onde mostraria mês-ano, o que pode ser feito pelo seguinte:

SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'

No meu caso particular, eu precisava reduzi-lo à abreviação de três letras do mês com um ano de 2 dígitos, parecido com o seguinte: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'


1

Experimentar SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;


0

Meu banco de dados não suporta a maioria das funções acima, porém achei que isso funciona:

SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;

por exemplo: SELECT SUBSTR(created, 1,7) FROM table;

retorna o ano e o mês no formato "aaaa-mm"


0

Obter mês e ano a partir da data

DECLARE @lcMonth nvarchar(10)
DECLARE @lcYear nvarchar(10)

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))

0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Saída: Mar-2019


0

Inquerir :- Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

Saída: - janeiro-2019

campo de data geral, podemos usar

datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName

0

Para resultado: "AAAA-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)

0
select convert(varchar(11), transfer_date, 106) 

me obteve o resultado desejado da data formatado em 07 de março de 2018

Minha coluna 'transfer_date' é uma coluna do tipo datetime e estou usando o SQL Server 2017 no azure


0

selecione CONCAT (MÊS (GETDATE ()), '.', ANO (GETDATE ()))

Resultado: 5.2020

selecione CONCAT (DATENAME (MONTH, GETDATE ()), '.', YEAR (GETDATE ()))

Saída: maio.2020

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.