columna de fecha especie distinta
-
06-09-2019 - |
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
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