如何在SQL Server中使用datetime日期类型更改日期的格式?

如何在SQL Server中使用datetime日期类型更改日期的格式?,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有以下查询从数据库检索我需要的内容: SELECT dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, dbo.SafetySuggestionsLog.Username, dbo.Divisions.DivisionShortcut, dbo.SafetySuggesti

我有以下查询从数据库检索我需要的内容:

SELECT     
   dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, 
   dbo.SafetySuggestionsLog.Description, dbo.employee.Name, 
   dbo.SafetySuggestionsLog.Username, dbo.Divisions.DivisionShortcut, 
   dbo.SafetySuggestionsType.Type, 
   ISNULL(dbo.SafetySuggestionsStatus.Status, '-') AS Status, 
   dbo.SafetySuggestionsLog.DateSubmitted
FROM 
   dbo.employee 
INNER JOIN
   dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username 
INNER JOIN
   dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 
INNER JOIN
   dbo.SafetySuggestionsType ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID 
LEFT OUTER JOIN
   dbo.SafetySuggestionsStatus ON dbo.SafetySuggestionsLog.StatusID = dbo.SafetySuggestionsStatus.ID
ORDER BY 
   dbo.SafetySuggestionsLog.DateSubmitted DESC
我希望将其显示为
(2012年6月23日上午7:15:00
),而不是将
DateSubmitted
列下的日期显示为(
6/23/2012上午7:15:00


如何做到这一点?

您可以使用以下示例查询获得上述格式:

  SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), CAST('6/23/2012 7:15:00 AM' AS DATETIME), 106), 8), ' ', '-') AS [Mon-YYYY]
在查询中,您可以这样尝试:

SELECT     dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, 
                      dbo.SafetySuggestionsLog.Username, dbo.Divisions.DivisionShortcut, dbo.SafetySuggestionsType.Type, ISNULL(dbo.SafetySuggestionsStatus.Status, '-') AS Status, 
                      REPLACE(RIGHT(CONVERT(VARCHAR(11),dbo.SafetySuggestionsLog.DateSubmitted, 106), 8), ' ', '-') AS [Mon-YYYY]
FROM         dbo.employee INNER JOIN
                      dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN
                      dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode INNER JOIN
                      dbo.SafetySuggestionsType ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID LEFT OUTER JOIN
                      dbo.SafetySuggestionsStatus ON dbo.SafetySuggestionsLog.StatusID = dbo.SafetySuggestionsStatus.ID
ORDER BY dbo.SafetySuggestionsLog.DateSubmitted DESC

请确保,
dbo.SafetySuggestionsLog.DateSubmitted
列应为
datetime
类型,否则将其强制转换为
datetime
类型

您可以使用以下查询示例获得上述格式:

  SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), CAST('6/23/2012 7:15:00 AM' AS DATETIME), 106), 8), ' ', '-') AS [Mon-YYYY]
在查询中,您可以这样尝试:

SELECT     dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, 
                      dbo.SafetySuggestionsLog.Username, dbo.Divisions.DivisionShortcut, dbo.SafetySuggestionsType.Type, ISNULL(dbo.SafetySuggestionsStatus.Status, '-') AS Status, 
                      REPLACE(RIGHT(CONVERT(VARCHAR(11),dbo.SafetySuggestionsLog.DateSubmitted, 106), 8), ' ', '-') AS [Mon-YYYY]
FROM         dbo.employee INNER JOIN
                      dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN
                      dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode INNER JOIN
                      dbo.SafetySuggestionsType ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID LEFT OUTER JOIN
                      dbo.SafetySuggestionsStatus ON dbo.SafetySuggestionsLog.StatusID = dbo.SafetySuggestionsStatus.ID
ORDER BY dbo.SafetySuggestionsLog.DateSubmitted DESC

请确保,
dbo.SafetySuggestionsLog.DateSubmitted
列应为
datetime
类型,否则将其强制转换为
datetime
类型

另一种更为自明的选择:

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE())) + '-' + RTRIM(YEAR(GETDATE()));
在查询中使用(以及别名,这将使您和其他人更容易阅读您的查询):

在SQL Server 2012中,使用新函数将更容易做到这一点,该函数与具有大致对等性,支持可选区域性,并且不需要记住样式号:

SELECT FORMAT(GETDATE(), 'MMM-yyyy');

另一个更加不言自明的选择:

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE())) + '-' + RTRIM(YEAR(GETDATE()));
在查询中使用(以及别名,这将使您和其他人更容易阅读您的查询):

在SQL Server 2012中,使用新函数将更容易做到这一点,该函数与具有大致对等性,支持可选区域性,并且不需要记住样式号:

SELECT FORMAT(GETDATE(), 'MMM-yyyy');

为什么在查询中输入“2012年6月23日上午7:15:00”?查询应适用于数据库中存储的所有日期。谢谢您的帮助。我真的很感激。另外,请您向我解释一下您在查询中添加的行吗?很抱歉,回复太晚了…查询包含简单的技巧,即CONVERT(VARCHAR(11),dbo.SafetySuggestionsLog.DateSubmitted,106)返回'DD Mon YYYY'格式的值,该值随后使用“right(CONVERT)(VARCHAR(11))从右侧提取8个字符,dbo.SafetySuggestionsLog.DateSubmitted,106),8)“将结果显示为“Mon YYYY”,即2012年6月,因此在最后,结果中的空格将替换为“-”,并使用“REPLACE(RIGHT(CONVERT)(RIGHT(CONVERT)(CONVERT)(VARCHAR(11),dbo.SafetySuggestionsLog.DateSubmitted,106),8),”,“-”)语句……您为什么在查询中添加“6/23/2012 7:15:00 AM”?查询应适用于数据库中存储的所有日期。谢谢您的帮助。我真的很感激。另外,请您向我解释一下您在查询中添加的行吗?很抱歉,回复太晚了…查询包含简单的技巧,即CONVERT(VARCHAR(11),dbo.SafetySuggestionsLog.DateSubmitted,106)返回'DD Mon YYYY'格式的值,该值随后使用“right(CONVERT)(VARCHAR(11))从右侧提取8个字符,dbo.SafetySuggestionsLog.DateSubmitted,106),8)“将结果作为“Mon-YYYY”(即2012年6月)给出的语句,因此最后,使用“REPLACE(RIGHT(CONVERT)(CONVERT(VARCHAR(11),dbo.SafetySuggestionsLog.DateSubmitted,106),8),“,-”)语句将结果中的空格替换为“-”。。。。。。