2011-12-26 87 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

相關問題