2014-09-15 2 views
0

Как преобразовать поле формата даты в формат MON-YYYY.Дата в формате MON-YYYY в текстовый формат

У меня есть дата 12-06-2014, и я хочу сравнить его с JUN-2014.

+0

Вы хотите сравнить это с '01.06.2014'? Или вы хотите считать, что '? -06-2014' равен' JUN-2014'? Я не думаю, что вам нужен текстовый формат. Вы можете сравнить даты. –

+0

Интерфейс отправляется только в формате JUN-2014 или Jun-2014. – user1820973

+0

Я могу попробовать конвертировать JUN-2014 в 06-2014, если есть какой-либо формат. – user1820973

ответ

2

Вот ссылка, которая объясняет все о формате даты: Date Format

Ваше решение, вероятно, следующее (MySQL версии):

UPPER(DATE_FORMAT(yourDate, '%b-%Y')) 

И для SQL Server:

UPPER(SUBSTRING(DATENAME(MONTH, yourDate), 1, 3) + '-' + CAST(DATEPART(YEAR, yourDate) AS VARCHAR(4))) 

Надеюсь, это поможет вам

+0

Это работает в SQL? – user1820973

+0

Возвращает строковое значение в нужном формате. Этот запрос предназначен для MySQL. –

+0

Мой плохой. Мне это нужно в SQL Server. Вы знаете, могу ли я преобразовать этот запрос в SQL Server один? – user1820973

0

SQL поддерживает несколько разных форматов дат, но не поддерживает форматы даты, отличные от числа цифр. Я бы настоятельно предложил найти метод, который использует один из этих форматов, как предложено Microsoft SQL documentation.

В качестве альтернативы, если абсолютно необходимо, чтобы вы использовали этот формат, следующий код может изменить любой формат даты в запрошенный вами формат.

declare @date date = '2014-01-01' 
select 
case when DATEPART(mm,@date) = 1 then 'JAN' 
when DATEPART(mm,@date) = 2 then 'FEB' 
when DATEPART(mm,@date) = 3 then 'MAR' 
when DATEPART(mm,@date) = 4 then 'APR' 
when DATEPART(mm,@date) = 5 then 'MAY' 
when DATEPART(mm,@date) = 6 then 'JUN' 
when DATEPART(mm,@date) = 7 then 'JUL' 
when DATEPART(mm,@date) = 8 then 'AUG' 
when DATEPART(mm,@date) = 9 then 'SEP' 
when DATEPART(mm,@date) = 10 then 'OCT' 
when DATEPART(mm,@date) = 11 then 'NOV' 
when DATEPART(mm,@date) = 12 then 'DEC' end 
+ '-' 
+ CONVERT(char(4),DATEPART(yy,@date)) as new_format 
0

Вы могли бы использовать что-то вроде следующего для форматирования даты и сравнения (SQL Fiddle):

SELECT * 
FROM 
(
    SELECT 
    CONCAT(
     CONVERT(CHAR(3), CONVERT(DATE, MyDateField, 105), 0), 
     '-', 
     DATEPART(YYYY, CONVERT(DATE, MyDateField, 105)) 
    ) AS DF 
    FROM MyTable 
) m 
WHERE m.DF = 'JUN-2014'; 
0

Вы можете использовать ниже даты преобразования формиата.

выберите левый (datename (мм, [Дата]), 3)
+ '-' + литая (DATEPART (YYYY, [дата]), как NVARCHAR (50))
от ArtistCalendar

0

Вы можете использовать функцию DATENAME(), чтобы получить имя для данного месяца, который может быть сокращенным, как так:

SELECT LEFT(DATENAME(mm, GETDATE()),3) -- Output: 'Sep' 

Вы можете добавить год с помощью:

SELECT YEAR(GETDATE()) 

Это должно быть преобразовано в строковое значение, чтобы обеспечить сравнение с указанным вами значением. Таким образом, вы можете сделать это:

SELECT LEFT(DATENAME(mm, GETDATE()),3) + '-' 
    + CAST(YEAR(GETDATE()) AS NVARCHAR(4)) AS InputDate -- Output: Sep-2014 

Чтобы проверить равенство прилагаемого значения, например. Sep-2014:

SELECT LEFT(DATENAME(mm, GETDATE()),3) + '-' 
    + CAST(YEAR(GETDATE()) AS NVARCHAR(4)) AS InputDate, 
    GETDATE() as FullDate, 
    CASE WHEN LEFT(DATENAME(mm, getdate()),3) + '-' 
      + CAST(YEAR(GETDATE()) as nvarchar(4)) = 'SEP-2014' 
      THEN 'True' 
      ELSE 'False' 
    END as Equality 

Ouptut

InputDate FullDate     Equality 
---------------------------------------------- 
Sep-2014 2014-09-15 14:35:57.427 True 

Для использования с таблицей:

DECLARE @compareDate AS NVARCHAR(10) 
SET @compareDate = 'Jan-2014' -- set this 

SELECT LEFT(DATENAME(mm, [YOUR_COL]),3) + '-' 
    + CAST(YEAR([YOUR_COL]) AS NVARCHAR(4)) AS InputDate, 
    [YOUR_COL]as FullDate, 
    CASE WHEN LEFT(DATENAME(mm, [YOUR_COL]),3) + '-' 
      + CAST(YEAR([YOUR_COL]) as nvarchar(4)) = @compareDate 
      THEN 'True' 
      ELSE 'False' 
    END as Equality 
From [YOUR_TABLE] 

Просто замените [YOUR_COL] с даты столбца и [YOUR_TABLE] с таблицей, которая содержит данные колонка.

+0

Будьте осторожны с этим методом, если приложение имеет настраиваемый пользователем язык. Предположение, что '@MonthAbbreviation = LEFT (@ MonthName, 3)' не поддерживается на других языках. – Anon

Смежные вопросы