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.