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


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)

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)

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'


15

Hay dos funciones SQL para hacerlo:

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


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);

¿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.


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

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,'')

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>


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

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


2

Prueba esto

select to_char(DATEFIELD,'MON') from YOUR_TABLE

p.ej.

select to_char(sysdate, 'MON') from dual

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


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'


1

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


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"


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))

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

Salida: Mar-2019


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

0

Para el resultado: "AAAA-MM"

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

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


0

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

Salida: 5.2020

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

Salida: mayo.2020

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.