coluna data tipo distinto
-
06-09-2019 - |
Pergunta
Eu preciso ano distintas e mês a partir de coluna de data que seria resolvido pela mesma coluna.
Eu tenho coulmn data com 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
depois de ter consulta, ele deve ser
2007/1/1
2007/11/1
2007/12/1
2008/5/1
2008/10/1
2009/11/1
Isto não 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
Solução
soemthing como isso iria funcionar em MS SQL Server:
select
distinct
dateadd(day, -1 * DAY(datefield) + 1, datefield)
From
datetable
order by
dateadd(day, -1 * DAY(datefield) + 1, datefield)
A chamada de função DATEADD basicamente subtrai dias da data atual (dia-1) -.> Você sempre terá o primeiro de qualquer mês daquela data no
Classificar por ele e está feito! : -)
Além disso, você também pode adicionar esta funcionalidade à sua mesa como uma "coluna computada" e, em seguida, usar isso para fácil acccess:
alter table yourTable
add FirstOfMonth As DATEADD(day, -1 * DAY(datefield) + 1, datefield) persisted
Em seguida, sua consulta seria ainda mais simples:
SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth
Marc
Outras dicas
Ao lidar com datas em SQLServer, evite usar cast
como este -. O formato resultante irá mudar dependendo de configuração do servidor
Em vez disso usar convert
e escolha um formato (por exemplo 112 ) que adiciona zeros à esquerda ao mês.
Anil, Você também têm parte do tempo nas datas? O que dataType você está usando para a coluna? Você está usando DateTime dataType ou Char?
Isso funciona para mim
SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1