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