2013-03-12 4 views
0

Использование следующего примерного запроса ниже в SSRS будет возвращать месяц как одно число (1-12). Я хочу показать дату как что-то вроде Jan 2000. Как я могу поменять свой код, чтобы иметь возможность форматировать из одного месяца числа в формат MMM YYYY? Я попробовал форматирование в самой визуальной студии, но в настоящее время он возвращается как MMM YYYY.Форматирование даты SSRS/TSQL

select distinct count(*) as Count, 
    con.STATE, 
    month(con.sub_Date) as Month, 
    year(con.sub_Date) as Year 
    from contract con 

    group by con.STATE,month(con.sub_date),year(con.sub_date) 

ответ

1

Настоятельно рекомендую вам выполнить форматирование даты на уровне отчета.

Верните дату из своего запроса в качестве первой даты требуемого периода, но затем установите строку формата для поля-заполнителя/текста.

Причина в том, что сортировка и обработка данных работают так, как ожидалось, когда отчет экспортируется в Excel.

Так что я хотел бы использовать запрос как:

SELECT DISTINCT 
    COUNT(*) AS Count , 
    con.STATE , 
    DATEADD(MONTH, DATEDIFF(MONTH, 0, con.sub_Date), 0) AS FirstOfMonth 
FROM 
    contract con 
GROUP BY 
    con.STATE , 
    DATEADD(MONTH, DATEDIFF(MONTH, 0, con.sub_Date), 0) 

, а затем использовать коды форматирования в отчете, такие как MMM, YYYY для отображения и разорвать дату, кроме с =Month(fields!FirstOfMonth.Value), если вам нужны компоненты для группировки. Это позволит пользователям соответствующим образом поворачивать данные, если это необходимо.

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

1

Вы можете добавить следующее в запросе для возврата предварительно отформатированный месяц/год как часть набора данных отчета - может быть проще, чем пытаться восстановить его на уровне отчета:

select distinct count(*) as Count, 
    con.STATE, 
    month(con.sub_Date) as Month, 
    year(con.sub_Date) as Year, 
    left(datename(mm, sub_Date), 3) + ' ' + cast(year(sub_Date) as char(4)) as MonthYear 
from contract con 
group by con.STATE, 
    month(con.sub_date), 
    year(con.sub_date), 
    left(datename(mm, sub_Date), 3) + ' ' + cast(year(sub_Date) as char(4)) 
+0

Похоже, что это может сработать, я посмотрю, когда я снова начну с ним общаться. Большое спасибо! – user2146212

1

Я обычно предпочитаю использовать CONVERT для получения неполных дат, хотя я не вижу форматов даты CONVERT, которые оставят вас чисто с выходом MONYYYY. Тем не менее, формат 106 доставит вам большую часть пути. Таким образом, комбинируя это с помощью RIGHT(), вы получите дату в формате, который вы ищете.

SELECT DISTINCT 
     COUNT(*) AS Count , 
     [con].[STATE] , 
     MONTH([con].[sub_Date]) AS Month , 
     YEAR([con].[sub_Date]) AS Year , 
     RIGHT(CONVERT(CHAR(11), [con].[sub_Date], 106), 8) AS MonthYear 
FROM [dbo].[contract] AS con 
GROUP BY [con].[STATE] , 
     MONTH([con].[sub_Date]) , 
     YEAR([con].[sub_Date]) , 
     RIGHT(CONVERT(CHAR(11), [con].[sub_Date], 106), 8) 
Смежные вопросы