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
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top