2009-11-23 5 views

ответ

120

А также предложения с учетом уже есть один другой Possiblity я могу сделать вывод из Вашего вопроса:
- Вы все еще хотите, чтобы результат будет датой
- Но вы хотите, чтобы «отбрасывать» Дни, часы и т.д.
- Оставление год/месяц только поле даты

SELECT 
    DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field] 
FROM 
    <your_table> 

Это получает количество полных месяцев от базовой даты (0), а затем добавляет их к этой базовой дате. Таким образом, округление до месяца, в котором находится дата.

ПРИМЕЧАНИЕ. В SQL Server 2008 у вас все равно будет установлено ВРЕМЯ 00: 00: 00.000 Это не совсем то же самое, что «удаление» любых обозначений дня и времени. Также ДЕНЬ установлен на первый. например 2009-10-01 00: 00: 00.000

+0

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

+19

Чтобы быть справедливым к остальным, вы не очень точно сформулировали. Я просто догадывался, что эта форма будет более полезной. Я бы посоветовал быть более сложным/явным в ваших вопросах, чтобы избежать неправильного понимания. Я рад, что это вам помогло :) – MatBailie

+0

Это не сработало для меня. В результате он дает мне 2023-02-01 00: 00: 00.000. – Dss

97
select month(dateField), year(dateField) 
+0

Отлично работает! Простой – Dss

29
SELECT DATEPART(yy, DateVal) 
SELECT DATEPART(MM, DateVal) 
SELECT DATENAME(MM, DateVal) 
+2

SELECT DATEPART (MM, DateVal) не возвращает «ММ». Его просто возвращается одна цифра, если месяц находится между 1-9. – Jaikrat

+0

Вместо «ММ» следует сказать «месяц»: «ВЫБРАТЬ ДАТЕПАРТ (месяц, getdate()) ' – Renne007

10

давайте напишем так: YEAR(anySqlDate) и MONTH(anySqlDate). Попробуйте, например, с помощью YEAR(GETDATE()).

+1

Прямо вперед, насколько это возможно. Спасибо, мужик. – Kadaj

12

Есть две функции SQL, чтобы сделать это:

Подробнее см. В связанной документации.

+3

Я бы посоветовал привести хотя бы несколько кратких примеров, потому что ссылки не всегда остаются навсегда ... На самом деле они уже не так хороши. – Carol

5

Я интерпретирую ваш вопрос двумя способами.

а) Вам нужно всего лишь месяц & года отдельно, в этом случае здесь ответ

select 
     [YEAR] = YEAR(getdate()) 
     ,[YEAR] = DATEPART(YY,getdate()) 
     , [MONTH] = month(getdate()) 
     ,[MONTH] = DATEPART(mm,getdate()) 
     ,[MONTH NAME] = DATENAME(mm, getdate()) 

б)

Вы хотите отобразить с заданной датой говорит '2009-11-24 09:01:55.483' в MONTH.YEAR формат , Таким образом, выход должен быть как 11.2009 в этом случае.

Если это должно быть так, то попробуйте это (среди других альтернатив)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'') 
8
convert(varchar(7), <date_field>, 120) 
because 120 results in 'yyyy-MM-dd' which is varchar(10) 
using varchar(7) will display only year and month 

example: 
select convert(varchar(7), <date_field>, 120), COUNT(*) 
from <some_table> 
group by convert(varchar(7), <date_field>, 120) 
order by 1 
13
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear 

выход будет выглядеть так: «декабрь 2013»

2
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
+0

любое объяснение для вашего кода? –

1

Попробуйте

select to_char(DATEFIELD,'MON') from YOUR_TABLE 

например.

select to_char(sysdate, 'MON') from dual 
10

Это может быть полезно также.

SELECT YEAR(0), MONTH(0), DAY(0); 

или

SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate()); 

или

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField); 
+0

В любом случае, чтобы не удалить «0» в поле возврата? – Si8

1

CONCAT (DatePart (уу, ДАТА), FORMAT (ДАТА, 'MM'))

дает, например, 201601, если вы хотите получить шестизначный результат

0

Моя база данных не поддерживает большинство функций выше, однако я обнаружил, что это работает:

SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;

, например: SELECT SUBSTR(created, 1,7) FROM table;

возвращает год и месяц в формате «гггг-мм»

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