Obtendo apenas Mês e Ano do SQL DATE

133

Eu preciso acessar apenas o campo Month.Year from Date no SQL Server.

user160820
fonte

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

MatBailie
fonte
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)
Lucas Ayala
fonte
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)
Adriaan Stander
fonte
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'

Valya Sylevych
fonte
15

Existem duas funções SQL para fazer isso:

Consulte a documentação vinculada para obter detalhes.

Grzegorz Gierlik
fonte
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);
NoNaMe
fonte
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.

Philippe Grondier
fonte
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
razvangry
fonte
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,'')
priyanka.sarkar
fonte
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>
Ibo
fonte
4
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
Valya Sylevych
fonte
3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

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

Mike
fonte
2

Tente isto

select to_char(DATEFIELD,'MON') from YOUR_TABLE

por exemplo.

select to_char(sysdate, 'MON') from dual
Amin
fonte
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

Pedro
fonte
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'

N. Haut
fonte
1

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

Sanduíche
fonte
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"

mobfire
fonte
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))
JIYAUL MUSTAPHA
fonte
0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Saída: Mar-2019

Amit Jaiswal
fonte
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
Deepak Tambe
fonte
0

Para resultado: "AAAA-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
Jelena Lazarevic
fonte
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

Hasan Junaid Hashmi
fonte
0

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

Resultado: 5.2020

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

Saída: maio.2020

Dinesh Gaud
fonte