2012-07-08 83 views
1

我有以下查询检索是我从数据库中需要:如何在SQL Server中使用datetime DateType更改日期的格式?

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 

而不是显示为(6/23/2012 7:15:00 AM)下DateSubmitted列中的日期,我想它显示为(Jun-2012)

如何做到这一点?

回答

1

您可以使用下面的示例查询有上述格式:

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类型

+0

为什么你把“2012年6月23日上午07时15分零零秒”在你的查询中?查询应该适用于存储在数据库中的所有日期。 – 2012-07-08 11:50:28

+0

请通过更新的答案.... – 2012-07-08 11:56:07

+0

感谢您的帮助。对此,我真的非常感激。另外,您能否向我解释您在查询中添加的行? – 2012-07-08 12:27:38

0

另一种更加不言自明的方法是:

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE())) + '-' + RTRIM(YEAR(GETDATE())); 

用于查询(用别名,这将使更加容易的查询,为您和其他人一起阅读):

SELECT 
    sl.ID, 
    sl.Title, 
    sl.[Description], 
    e.employee.Name, 
    sl.Username, 
    d.DivisionShortcut, 
    st.[Type], 
    ISNULL(ss.[Status], '-') AS [Status], 
    sl.DateSubmitted, 
    MonthSubmitted = CONVERT(CHAR(3), DATENAME(MONTH, sl.DateSubmitted)) 
    + '-' + RTRIM(YEAR(sl.DateSubmitted)) 
FROM 
    dbo.employee AS e 
    INNER JOIN dbo.SafetySuggestionsLog AS sl 
    ON e.Username = sl.Username 
    INNER JOIN dbo.Divisions AS d 
    ON e.DivisionCode = d.SapCode 
    INNER JOIN dbo.SafetySuggestionsType AS st 
    ON sl.TypeID = st.ID 
    LEFT OUTER JOIN dbo.SafetySuggestionsStatus AS ss 
    ON sl.StatusID = ss.ID 
ORDER BY 
    sl.DateSubmitted DESC; 

在SQL Server 2012中,这将是与更容易新FORMAT()功能,它具有与C# format function粗糙的奇偶校验,支持可选的文化,并且不需要无需记住风格号:

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