문제

같은 열로 정렬되는 날짜 열에서 뚜렷한 연도 및 월이 필요합니다.

(yyyy/mm/dd)와 같은 값이있는 날짜 coulmn이 있습니다.

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

쿼리를 한 후에는해야합니다

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

이것은 작동하지 않는 것 같습니다

SELECT distinct (cast(year(datecol) as nvarchar(20) ) +
       '/'+ cast(month(datecol) as nvarchar(20) ) + '/1') as dt1 
FROM Table 
ORDER BY dt1
도움이 되었습니까?

해결책

이와 같은 Soemthing은 MS SQL Server에서 작동합니다.

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

Dateadd 함수 호출은 기본적으로 현재 날짜부터 (1 일) 일을 빼냅니다.> 당신은 항상 그 날짜가있는 모든 달의 첫 번째 달을 얻습니다.

그것으로 정렬하면 당신은 끝났습니다! :-)

또한이 기능을 테이블에 "계산 된 열"으로 추가 한 다음이 기능을 쉽게 사용할 수 있습니다.

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

그러면 쿼리가 훨씬 간단합니다.

SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth

마크

다른 팁

SQLServer의 날짜를 처리 할 때 사용하지 마십시오 cast 이와 마찬가지로 - 결과 형식은 서버 구성에 따라 변경됩니다.

대신 사용하십시오 convert 그리고 한 달에 0을 추가하는 형식 (예 : 112)을 선택하십시오.

anil, 당신은 또한 날짜에 시간 부분이 있습니까? 열에 어떤 데이터 타입을 사용하고 있습니까? DateTime Datatype 또는 Char를 사용하고 있습니까?

이것은 나를 위해 작동합니다

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top