Как преобразовать поле формата даты в формат MON-YYYY.Дата в формате MON-YYYY в текстовый формат
У меня есть дата 12-06-2014, и я хочу сравнить его с JUN-2014.
Как преобразовать поле формата даты в формат MON-YYYY.Дата в формате MON-YYYY в текстовый формат
У меня есть дата 12-06-2014, и я хочу сравнить его с JUN-2014.
Вот ссылка, которая объясняет все о формате даты: 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)))
Надеюсь, это поможет вам
Это работает в SQL? – user1820973
Возвращает строковое значение в нужном формате. Этот запрос предназначен для MySQL. –
Мой плохой. Мне это нужно в SQL Server. Вы знаете, могу ли я преобразовать этот запрос в SQL Server один? – user1820973
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
Вы могли бы использовать что-то вроде следующего для форматирования даты и сравнения (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';
Вы можете использовать ниже даты преобразования формиата.
выберите левый (datename (мм, [Дата]), 3)
+ '-' + литая (DATEPART (YYYY, [дата]), как NVARCHAR (50))
от ArtistCalendar
Вы можете использовать функцию 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]
с таблицей, которая содержит данные колонка.
Будьте осторожны с этим методом, если приложение имеет настраиваемый пользователем язык. Предположение, что '@MonthAbbreviation = LEFT (@ MonthName, 3)' не поддерживается на других языках. – Anon
Вы хотите сравнить это с '01.06.2014'? Или вы хотите считать, что '? -06-2014' равен' JUN-2014'? Я не думаю, что вам нужен текстовый формат. Вы можете сравнить даты. –
Интерфейс отправляется только в формате JUN-2014 или Jun-2014. – user1820973
Я могу попробовать конвертировать JUN-2014 в 06-2014, если есть какой-либо формат. – user1820973