сортировать отдельные столбцы даты - PullRequest
0 голосов
/ 01 июня 2009

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

У меня есть дата с параметрами, такими как (ГГГГ / ММ / ДД)

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

Ответы [ 3 ]

2 голосов
/ 01 июня 2009

Примерно так будет работать на 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 голосов
/ 01 июня 2009

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

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

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1
0 голосов
/ 01 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...