2009-06-01 2 views
0

Мне нужен отчетный год и месяц от колонки даты, которые будут сортироваться по одной колонке.сортировка разная дата столбец

У меня есть дата coulmn со значениями типа (YYYY/MM/DD)

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 

ответ

2

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 

Марк

0

При использовании дат в SqlServer избегайте использования cast следующим образом: re формат sulting будет меняться в зависимости от конфигурации сервера.

Вместо этого используйте convert и выберите формат (например, 112), который добавляет ведущие нули в месяц.

0

Анил, есть ли у вас также есть часть времени в сроках? Какой тип данных вы используете для столбца? Вы используете с использованием DataTime dataType или Char?

Это работает для меня

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1 
Смежные вопросы