2013-09-17 4 views
2

У меня есть набор дат, которые находятся в формате DD-MMM-YYYY. Мне нужно иметь возможность сравнивать даты, используя только часть DD-MMM даты, так как год не важен.Получение только дня и месяца из поля даты

Как бы я мог достичь этого?

Я пробовал читать информацию о функции DATEPART (редактирование: это, очевидно, не сработало), но я могу только теоретически получить это, чтобы вернуть часть DD или MMM, а не сразу обе.

Редактировать: добавлен тег oracle. Сожалею.

Примера поля даты: 01-MAR-1994

+4

Oracle, MSSQL, MySQL? Что такое ** тип данных ** столбца? –

+0

@neoistheone Я думаю, что DATEPART предназначен для MS SQL Server. – ppeterka

+0

Использование оракула. То, что я подразумевал под «использованием», заключалось в том, что я пытался понять это. Извините за не указание. Тип данных столбца имеет тип Date. – rakeshisu

ответ

5

Если ваш столбец имеет тип DATE, то он не имеет формата.

Если я правильно Вас понял, то вы хотите, чтобы просмотреть только mon-dd часть, так что вам нужно, чтобы преобразовать его с TO_CHAR функции
т.е.

select to_char(your_date_column, 'mon-dd') from your_table 
+0

Это именно то, что мне нужно. Благодарю. Могу ли я сравнивать даты, обычно с функцией to_char? Например, где mar-01> apr-30 – rakeshisu

+0

@rakeshisu, Нет ... это строка, теперь не дата. Может быть, вам нужен другой формат, что-то вроде 'select to_char (your_date_column, mmdd') (помните, что дата не имеет формата, это число, обозначающее дату) –

+0

О, я вижу. Итак, при использовании функции to_char, что определяет тип данных, который будет возвращен, или всегда возвращает строку? – rakeshisu

3

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

select convert(varchar(5),getdate(),110) 
+0

это нормально в MS SQL, но не работает в Oracle –

2

Предполагая, что вы используете SQL Server или Oracle, так как вы пытались с помощью DATEPART, вы можете просто получить день и месяц, используя DAY() и MONTH() функции. Предполагая, что, опять-таки, что даты вы сравниваете в двух разных таблицах, это будет выглядеть примерно так:

SELECT MONTH(t1.date), DAY(t2.date) 
FROM table AS t1 
INNER JOIN table2 AS t2 
ON t1.key = t2.key 
WHERE MONTH(t1.date) = MONTH(t2.date) 
AND DAY(t1.date) = DAY(t2.date) 

EDIT: Если вы только сравнение строк в одной таблице, вам нужно только очень простой запрос ,

SQLFiddle

select id, TO_CHAR(most_recent, 'mon-dd') 
from (
    select id, MAX(date1) AS most_recent 
    from table1 
    group by id 
) 
+0

Я сравниваю разные строки в одной таблице. Попытка определить, какая из записей произошла последней в любой год. Когда я пытаюсь использовать функции DAY() или MONTH(), это дает мне неправильную ошибку идентификатора. – rakeshisu

+0

Для этого вам просто нужно сделать подзапрос, который получает максимальную дату, а затем выберите это в формате «mm-dd» в вашем внешнем выражении select, используя 'TO_CHAR'. – Tricky12

0

Вы также можете комбинировать месяц и день в одно целое:

EXTRACT(MONTH FROM datecol) * 100 + EXTRACT(DAY FROM datecol) AS MonthDay 

Тогда проще сортировать и сравнивать.

0

Это должно сделать трюк

`select CONVERT(varchar(7),datetime_column,100) from your_table` 
0

ВЫБОР ЛЕВЫЙ (REPLACE (ПРЕОБРАЗОВАНИЯ (VARCHAR (10), GETDATE() - 1,3), '/', ''), 4)

т бы его работа для вас?

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