如何在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),“,-”)语句将结果中的空格替换为“-”。。。。。。