Pregunta

Necesito año y el mes distinta de la columna fecha que serían ordenadas según la misma columna.

Tengo fecha coulmn con valores como (AAAA / MM / DD)

2007/11/7
2007/1/8
2007/11/4
2007/12/3
2008/10/4
2009/11/5
2008/5/16

después de la consulta, debe ser

2007/1/1
2007/11/1
2007/12/1
2008/5/1
2008/10/1
2009/11/1

Esto no parece estar funcionando

SELECT distinct (cast(year(datecol) as nvarchar(20) ) +
       '/'+ cast(month(datecol) as nvarchar(20) ) + '/1') as dt1 
FROM Table 
ORDER BY dt1
¿Fue útil?

Solución

Soemthing como esto funcionaría en MS SQL Server:

select 
    distinct 
    dateadd(day, -1 * DAY(datefield) + 1, datefield)
From
    datetable
order by
    dateadd(day, -1 * DAY(datefield) + 1, datefield) 

La llamada a la función DATEADD básicamente resta (día-1) DÍAS a partir de la fecha actual -.> Se trata siempre del primero de cualquier mes de esa fecha se encuentra en

Ordenar por ella y ya está! : -)

Además, usted podría también agregar esta funcionalidad a su mesa como una "columna calculada" y luego usar ese para una fácil acccess:

alter table yourTable 
  add FirstOfMonth As DATEADD(day, -1 * DAY(datefield) + 1, datefield) persisted

A continuación, la consulta sería aún más simple:

SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth

Marc

Otros consejos

Cuando se trata de fechas en evitar el uso de SqlServer cast como esto -. El formato resultante cambiará en función de configuración del servidor

En lugar de utilizar convert y elija un formato (por ejemplo 112 ) que añade ceros para no el mes.

Anil, ¿Tienes tiempo parcial en las fechas? ¿Qué tipo de datos se está utilizando para la columna? Es usted usando tipo de datos DATETIME o Char?

Esto funciona para mí

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top