Получение только месяца и года из SQL DATE

Ответы:

170

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

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

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

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

MatBailie
источник
1
Это не сработало для меня. Это дает мне 2023-02-01 00: 00: 00.000 в результате.
Dss
1
@dss - с какими параметрами? Покажи реальный SQL и я с удовольствием посмотрю.
MatBailie
@MatBailie SELECT DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products где productID = 123 Столбец «LastSaleDate» объявляется как «(datetime, not null)», и я получаю: 2014-09-01 00: 00: 00,000
Dss
1
@DSS - Да, похоже, это правильно. Он округляется до самого начала сентября 2014 года. Тип данных «Только год и месяц» отсутствует, поэтому использование первого момента каждого месяца является стандартной практикой. При преобразовании этого значения DATETIME в строку (слой Aaplication, Presentation Layer, Reporting Layer и т. Д.) Вы всегда можете отформатировать его только с частями года и месяца. Но с точки зрения манипулирования данными «в базе данных» это правильно.
MatBailie
Я думаю, возможно, потому что ваш ответ предназначался для использования с полем «Дата», но я использую поле «дата / время», так что это, вероятно, проблема.
Dss
133
select month(dateField), year(dateField)
Лукас Айала
источник
2
здорово! Вы можете подключить их к одному столбцу: «выберите приведение (month (dateField) как varchar) +». ' + cast (year (dateField) as varchar) '
izik f
32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)
Адриан Стандер
источник
2
SELECT DATEPART (MM, DateVal) не возвращает «MM». Это просто возвращает одну цифру, если месяц между 1-9.
Джайкрат
Вместо «ММ» должно быть написано «месяц»: «ВЫБЕРИТЕ DATEPART (month, getdate ())»
Renne007
17
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear

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

Валя Силевич
источник
15

Для этого есть две функции SQL:

Обратитесь к связанной документации для деталей.

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

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

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

или

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

или

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);
Без имени
источник
В любом случае, чтобы не удалить «0» в поле возврата?
Si8
11

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

Филипп Грондиер
источник
10
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
razvangry
источник
6

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

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

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,'')
priyanka.sarkar
источник
5

Некоторые базы данных, такие как MS ACCESSили RODBCмогут не поддерживать SQL SERVERфункции, но для любой базы данных, которая имеет FORMATфункцию, вы можете просто сделать это:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>
Ibo
источник
4
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
Валя Силевич
источник
3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

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

Майк
источник
2

Попробуй это

select to_char(DATEFIELD,'MON') from YOUR_TABLE

например.

select to_char(sysdate, 'MON') from dual
Амин
источник
2

Попробуй это:

португальский

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)

Результат: майо 2019


английский

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)

Результат: май 2019

Если вы хотите на другом языке, измените « pt-pt » или « en-US » на любой из них в ссылке

Pedro
источник
1

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

SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'

В моем конкретном случае мне нужно было сократить его до трехбуквенного месяца с двухзначным годом, примерно так: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'

Н. Хаут
источник
1

Пытаться SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;

сандвич
источник
0

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

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

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

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

mobfire
источник
0

Получить месяц и год от даты

DECLARE @lcMonth nvarchar(10)
DECLARE @lcYear nvarchar(10)

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))
ДЖИЯУЛЬ МУСТАФА
источник
0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Выход: март-2019

Амит Джайсвал
источник
0

Запрос: - Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

Выход: - январь-2019

общее поле даты мы можем использовать

datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName
Дипак Тамбе
источник
0

Для результата: «ГГГГ-ММ»

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
Елена Лазаревич
источник
0
select convert(varchar(11), transfer_date, 106) 

получил желаемый результат даты, отформатированной как 07 марта 2018 г.

Мой столбец transfer_date - это столбец типа datetime, и я использую SQL Server 2017 на лазурном сервере.

Хасан Джунаид Хашми
источник
0

выберите CONCAT (МЕСЯЦ (GETDATE ()), '.', YEAR (GETDATE ()))

Выход: 5.2020

выберите CONCAT (DATENAME (MONTH, GETDATE ()), '.', YEAR (GETDATE ()))

Выход: май 2020 г.

Динеш Гауд
источник