1

データベースから必要なものを取得する次のクエリがあります。

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

DateSubmitted列の下の日付を ( ) として表示する代わりに、6/23/2012 7:15:00 AMとして表示したいと思います(Jun-2012)

どうやってするか?

4

2 に答える 2

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

于 2012-07-08T11:49:00.620 に答える
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 では、 C# 形式の関数FORMAT()と大まかに同等であり、オプションのカルチャをサポートし、スタイル番号を記憶する必要がない新しい関数を使用すると、これがはるかに簡単になります。

SELECT FORMAT(GETDATE(), 'MMM-yyyy');
于 2012-07-08T12:57:29.950 に答える