2011-12-26 3 views
2

У меня есть следующий SQL-запрос, который возвращает информацию DateTime в формате в формате месяц, как декабрь или Ноябрь:Как получить только дату из DateTime информации в sqlserver?

SELECT  COUNT(DISTINCT dbo.UserQuiz.QuizID) AS [Total Number of Taken Quizzes], dbo.Divisions.DivisionName, DATENAME(Month, dbo.UserQuiz.DateTimeComplete) 
         AS Month 
FROM   dbo.UserQuiz INNER JOIN 
         dbo.Quiz ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID INNER JOIN 
         dbo.employee ON dbo.UserQuiz.Username = dbo.employee.Username INNER JOIN 
         dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 
GROUP BY dbo.Divisions.DivisionName, DATENAME(Month, dbo.UserQuiz.DateTimeComplete) 

Я хочу только, чтобы получить дату в любом формате, таких как: мм-дд-гггг. Как это сделать?

ответ

1
SELECT  COUNT(DISTINCT dbo.UserQuiz.QuizID) AS [Total Number of Taken Quizzes], dbo.Divisions.DivisionName, convert(varchar,dbo.UserQuiz.DateTimeComplete,110) 
         AS Month 
FROM   dbo.UserQuiz INNER JOIN 
         dbo.Quiz ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID INNER JOIN 
         dbo.employee ON dbo.UserQuiz.Username = dbo.employee.Username INNER JOIN 
         dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 
GROUP BY dbo.Divisions.DivisionName,convert(varchar,dbo.UserQuiz.DateTimeComplete,110) 
+0

Что означает 110 в преобразовании (varchar, dbo.UserQuiz.DateTimeComplete, 110)? – user1093651

+1

Это означает формат США (mm-dd-yyyy), проверьте следующую ссылку: http: //msdn.microsoft.com/en-us/library/ms187928.aspx –

1
select cast(convert(varchar, datefield, 112) as datetime) 

Это для возвращения в DateTime, если вы хотите строку - делать только конвертировать с правильным форматом числом вместо 112

Для серверной версии 2008+ можно использовать более простой и быстрые в GROUP BY дизъюнкции конструкции, как

CAST(dbo.UserQuiz.DateTimeComplete as DATE) 
+0

В чем разница между вашим ответом и приведенным выше ответом? Я имею в виду, в чем разница между 110 и 112? – user1093651

+1

Разница во времени ответа - мой ответ, если сначала разница между 112 и 110 - это 112 возвращает дату как yyyymmdd (сортируемый формат) и 110 как mm-dd-yyyy - если вы хотите просто строки - используйте 110, если вы палочка для работы с датой (сортировка, разбор, разность с другой датой) - использование 112 –

0

я бы, вероятно, возвращать только дату в качестве значения даты и времени, и оставить работу форматирования в клиентском приложении. Вы можете сбросить время и день часть даты-времени, как это:

DATEADD(MONTH, DATEDIFF(MONTH, 0, your_datetime_value), 0) 

выше выражение возвращает полночь первого соответствующего месяца, например, для 2011-12-26 16:49:53.487 это произвело бы 2011-12-01 00:00:00.000.

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