Obteniendo solo mes y año de SQL DATE

Respuestas:

170

Además de las sugerencias dadas, hay otra posibilidad que puedo inferir de su pregunta:
- Todavía desea que el resultado sea una fecha
- Pero desea 'descartar' los Días, Horas, etc.
- Dejar un año / mes solo campo de fecha

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

Esto obtiene el número de meses completos desde una fecha base (0) y luego los agrega a esa fecha base. Redondeando así al mes en el que se encuentra la fecha.

NOTA: en SQL Server 2008, aún tendrá la HORA adjunta como 00: 00: 00,000 Esto no es exactamente lo mismo que "eliminar" cualquier notación de día y hora por completo. También el DÍA establecido en el primero. por ejemplo, 2009-10-01 00: 00: 00.000

MatBailie
fuente
1
Esto no funcionó en absoluto para mí. Me da 2023-02-01 00: 00: 00.000 como resultado.
Dss
1
@dss: ¿con qué parámetros? Mostrar el SQL real y estoy feliz de echar un vistazo.
MatBailie
@MatBailie SELECT DATEADD (MES, DATEDIFF (MES, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products donde productID = 123 La columna "LastSaleDate" se declara como "(datetime, not null)" y obtengo: 2014-09-01 00: 00: 00.000
Dss
1
@DSS - Sí, eso parece ser correcto. Se está redondeando a principios de septiembre de 2014. No existe un tipo de datos "Año y mes solamente", por lo que usar el primer momento de cada mes es la práctica estándar. Al convertir este valor DATETIME en una cadena (Capa de aplicación, Capa de presentación, Capa de informes, etc.), siempre puede elegir formatearlo solo con las partes de año y mes. Pero en términos de manipulación de datos "en la base de datos" esto es correcto.
MatBailie
Creo que tal vez porque su respuesta estaba destinada a ser utilizada con un campo "Fecha", pero estoy usando un campo "fecha hora", por lo que ese es probablemente el problema.
Dss
133
select month(dateField), year(dateField)
Lucas Ayala
fuente
2
¡Excelente! Puede conectarlos a una columna: 'seleccione cast (mes (dateField) como varchar) +'. ' + elenco (año (dateField) como varchar) '
izik f
32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)
Adriaan Stander
fuente
2
SELECT DATEPART (MM, DateVal) no devuelve 'MM'. Simplemente devuelve un solo dígito si el mes está entre 1-9.
Jaikrat
En lugar de "MM" debería decir "mes": 'SELECCIONAR DATEPART (mes, getdate ())'
Renne007
17
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear

el resultado se verá así: 'Diciembre 2013'

Valya Sylevych
fuente
15

Hay dos funciones SQL para hacerlo:

Consulte la documentación vinculada para más detalles.

Grzegorz Gierlik
fuente
55
Sugeriría poner al menos algunos ejemplos breves porque los enlaces no siempre se quedan para siempre ... De hecho, ya no son buenos.
Carol
12

Esto también puede ser útil.

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

o

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

o

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);
Sin nombre
fuente
¿De todos modos no eliminar el "0" en el campo de retorno?
Si8
11

escribámoslo de esta manera: YEAR(anySqlDate)y MONTH(anySqlDate). Pruébalo con YEAR(GETDATE())por ejemplo.

Philippe Grondier
fuente
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
fuente
6

Estoy interpretando tu pregunta de dos maneras.

a) Solo necesita mes y año por separado, en cuyo caso aquí está la respuesta

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

si)

Desea mostrar desde una fecha determinada, por ejemplo, '2009-11-24 09:01:55.483'en formato MES.AÑO . Entonces la salida debería venir como 11.2009en este caso.

Si se supone que ese es el caso, intente esto (entre otras alternativas)

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

Algunas de las bases de datos, como pueden MS ACCESSo RODBCno admitir las SQL SERVERfunciones, pero para cualquier base de datos que tenga la FORMATfunción, simplemente puede hacer esto:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>
Ibo
fuente
4
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
Valya Sylevych
fuente
3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

le da, por ejemplo, 201601 si desea un resultado de seis dígitos

Miguel
fuente
2

Prueba esto

select to_char(DATEFIELD,'MON') from YOUR_TABLE

p.ej.

select to_char(sysdate, 'MON') from dual
Amin
fuente
2

Prueba esto:

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: mayo de 2019

Si lo desea en otro idioma, cambie ' pt-pt ' o ' en-US ' a cualquiera de estos en el enlace

Pedro
fuente
1

Tenía un requisito específico para hacer algo similar donde mostraría mes-año, lo que se puede hacer de la siguiente manera:

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

En mi caso particular, necesitaba reducirlo a la apertura de 3 letras por mes con un año de 2 dígitos, con un aspecto similar a este: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'

N. Haut
fuente
1

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

Emparedado
fuente
0

Mi base de datos no admite la mayoría de las funciones anteriores, sin embargo, descubrí que esto funciona:

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

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

devuelve el año y el mes en el formato "aaaa-mm"

mobfire
fuente
0

Obtener mes y año desde la fecha

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

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))
JIYAUL MUSTAPHA
fuente
0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Salida: Mar-2019

Amit Jaiswal
fuente
0

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

Salida: enero-2019

campo de fecha general que podemos usar

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

Para el resultado: "AAAA-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
Jelena Lazarevic
fuente
0
select convert(varchar(11), transfer_date, 106) 

me dio el resultado deseado de fecha con formato 07 Mar 2018

Mi columna 'transfer_date' es una columna de tipo de fecha y hora y estoy usando SQL Server 2017 en azure

Hasan Junaid Hashmi
fuente
0

seleccione CONCAT (MES (GETDATE ()), '.', AÑO (GETDATE ()))

Salida: 5.2020

seleccione CONCAT (DATENAME (MES, GETDATE ()), '.', AÑO (GETDATE ()))

Salida: mayo.2020

Dinesh Gaud
fuente