2011-12-26 95 views
2

我有一个返回月份格式像十二月或Novermber日期时间格式的信息,下面的SQL查询:如何仅从sqlserver中的DateTime信息中获取日期?

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) 

我想只是为了获得任何格式的日期,例如:MM-DD-YYYY。怎么做?

回答

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

转换(varchar,dbo.UserQuiz.DateTimeComplete,110)中的110意味着什么? – user1093651 2011-12-26 12:14:39

+1

这意味着美国格式(mm-dd-yyyy)检查以下链接:http://msdn.microsoft.com/en-us/library/ms187928.aspx – 2011-12-26 12:16:28

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

这返回的日期时间,如果你想有一个字符串 - 你只能用适当的格式数字,而不是112

转换对于服务​​器版本2008+可以使用更简单和快速的GROUP BY条款建筑像

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

你的答案和上面的答案有什么区别?我的意思是110和112之间有什么区别? – user1093651 2011-12-26 12:15:35

+1

答案的时间差异 - 我的答案,如果第一,112和110之间的差异 - 112返回日期为yyyymmdd(可排序格式)和110为mm-dd-yyyy - 如果你只想要字符串 - 使用110,如果你魔杖使用日期值进行操作(排序,解析,与其他日期的差异) - 使用112 – 2011-12-26 12:20:30

0

我可能会只返回日期作为时间值,并使格式的工作,客户端应用程序。可以重置日期时间的时间和日期部分是这样的:

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

上述表达式返回第一个相应月份的,例如午夜对于2011-12-26 16:49:53.487它会产生2011-12-01 00:00:00.000

相关问题