Форматирование столбца даты и времени - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть таблица с именем FcData, и данные выглядят следующим образом:

Op_Date  

2011-02-14 11:53:40.000 
2011-02-17 16:02:19.000 
2010-02-14 12:53:40.000 
2010-02-17 14:02:19.000 

Я хочу, чтобы вывод в примере вывода в формате мм / гггг был:

Op_Date

02/2011
02/2011
02/2010
02/2010

Я написалзапрос как:

SELECT CONVERT(VARCHAR,DATEPART(mm,Op_Date
)) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))
 FROM Fcdata

Но я получаю вывод как:

Op_Date

2/2011
2/2011
2/2010
2/2010

Может кто-нибудь помочь мне?

Ответы [ 3 ]

4 голосов
/ 20 сентября 2011

Я думаю, что это самый короткий код, который вы найдете, и требуется только одно преобразование:

SELECT RIGHT(CONVERT(CHAR(10), Op_Date, 103), 7);

Отображение на ваш запрос:

SELECT Op_Date, RIGHT(CONVERT(CHAR(10), Op_Date, 103), 7)
    FROM dbo.Fcdata;

И соединение будет:

SELECT f.*, o.*
    FROM dbo.Fcdata AS f
    INNER JOIN dbo.OtherTable AS o
    ON RIGHT(CONVERT(CHAR(10), f.Op_Date, 103), 7) = o.column_name;

Только не ожидайте, что производительность будет большой, если таблица большая, потому что преобразование заставит SQL Server сканировать каждую строку.

Также, пожалуйста, не используйте сокращения, такие как гггг и мм. Вы знаете, что y и yyyy разные? И что теперь существует ПЯТЬ различных сокращений, начинающихся с m (m, mi, ms, mm, mcs)? Поясните это. Если вы имеете в виду ГОД, скажите ГОД. Тогда это всем понятно.

1 голос
/ 20 сентября 2011
SELECT RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(MM, Op_Date)), 2) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))
1 голос
/ 20 сентября 2011
SELECT 
  CASE WHEN LEN(CONVERT(VARCHAR,DATEPART(mm,Op_Date)) = 1 THEN
    '0' + CONVERT(VARCHAR,DATEPART(mm,Op_Date)) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))
  ELSE
    CONVERT(VARCHAR,DATEPART(mm,Op_Date)) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))
  END
FROM Fcdata
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...