Получение только месяца и года из 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


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


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

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,'')

5

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

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>


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 » на любой из них в ссылке


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'



0

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

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

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

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


0

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

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

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))


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 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 г.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.