2015-11-19 5 views
0

Я пытаюсь получить результаты запроса в определенном формате, и я не могу найти для него ответ.Форматирование даты в результатах запроса

Это мой код:

SELECT convert(date, TimeReported, 101) as 'Error Date', count(ErrorDetails) as 'Error Count' 

FROM ErrorLog 

where ErrorDetails like '%login failed%' 

GROUP BY Convert(date, TimeReported, 101) 

order by 'Error Date' desc 

Я хочу, чтобы результаты дата будет отображаться как дд/мм/гггг

Error Date Error Count: 
11/12/2015 1 
11/05/2015 3 
03/24/2015 4 

Код выше, дает свои результаты: гггг/мм/дд

Error Date Error Count 
2015-11-12 1 
2015-11-05 3 
2015-03-24 4 
+1

Я не знаю потребителя ваших данных, но я настоятельно рекомендую вам разрешить пользователю форматировать его в то время, когда его нужно отформатировать, а не на уровне базы данных. –

+0

Yup, форматирование на тыльной стороне довольно контрпродуктивно. –

ответ

0

Попробуйте это:

;with cte as 
(
SELECT convert(varchar(10), TimeReported, 101) as 'Error Date', count(ErrorDetails) as 'Error Count' 
FROM ErrorLog 
where ErrorDetails like '%login failed%' 
GROUP BY convert(varchar(10), TimeReported, 101) 
) 

select * 
from cte 
order by YEAR(CONVERT(date,[Error Date])) desc, [Error Count] asc 

https://msdn.microsoft.com/en-ca/library/ms187928.aspx

+0

Это дает мне результаты в формате, но затем с порядковым номером он использует месяц, чтобы заказать не год – SHill

+0

Извините, просто измените порядок, чтобы быть столбцом TimeReported, а не псевдоним «дата ошибки». Обновленный ответ. – JiggsJedi

+0

Это дает мне: Msg 8127, уровень 16, состояние 1, строка 9 Столбец «ErrorLog.TimeReported» недействителен в предложении ORDER BY, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – SHill

0

Вы можете попробовать что-то вроде этого в запросе:

convert(nvarchar(10), TimeReported, 103) 
0

Если вы используете SQL 2012 или более поздней версии, у вас есть гораздо более богатый способ форматирования данных, включая даты. Используйте новую функцию Format. https://msdn.microsoft.com/en-us/library/hh213505(v=sql.110).aspx

С помощью этой функции вы можете использовать любой спецификатор формата .NET, либо однобуквенные версии (Стандартные), либо Пользовательские форматтеры. Итак, вместо convert(date, TimeReported, 101) as 'Error Date' вы можете использовать format(date, 'MM/dd/yyyy') as 'Error Date'. И да, это чувствительно к регистру. Если вы использовали «мм» вместо «ММ», вместо этого вы получили бы минуты.

Смежные вопросы