Получение месяца и года из временных данных в SQL Server 2005

Мне нужно получить месяц+год из времени даты в SQL Server, например 'Jan 2008'. Я группирую запрос по месяцу, году. Я искал и нашел такие функции, как datepart, convert и т.д., но ни одна из них не кажется полезной для этого. Я что-то упустил? Есть ли функция для этого?

Комментарии к вопросу (4)
select 
datepart(month,getdate()) -- integer (1,2,3...)
,datepart(year,getdate()) -- integer
,datename(month,getdate()) -- string ('September',...)
Комментарии (4)
Решение

Если вы имеете в виду, что хотите вернуть их в виде строки, в этом формате;

SELECT 
  CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) 
FROM customers

Здесь приведены другие варианты формата

Комментарии (2)

Начиная с SQL Server 2012, вы можете использовать:

SELECT FORMAT(@date, 'yyyyMM')
Комментарии (3)

Использовать:

select datepart(mm,getdate())  --to get month value
select datename(mm,getdate())  --to get name of month
Комментарии (0)

Забавно, я просто играл вокруг, записывая этот же запрос в SQL Server, а затем в LINQ .

SELECT 
    DATENAME(mm, article.Created) AS Month, 
    DATENAME(yyyy, article.Created) AS Year, 
    COUNT(*) AS Total 
FROM Articles AS article 
GROUP BY 
    DATENAME(mm, article.Created), 
    DATENAME(yyyy, article.Created) 
ORDER BY Month, Year DESC

Он производит следующий упут (пример).

Month | Year | Total

January | 2009 | 2
Комментарии (0)

В SQL Server 2012 можно использовать ниже

выберите FORMAT (getdate (), «MMM yyyy»)

Это дает точный «июнь 2016»

Комментарии (0)

Как насчет этого?

Select DateName( Month, getDate() ) + ' ' + DateName( Year, getDate() )
Комментарии (0)

Такого формата не существует. Вам нужно сделать комбинацию из двух вещей,

select convert(varchar(4),getdate(),100)  + convert(varchar(4),year(getdate()))
Комментарии (0)
( Month(Created) + ',' + Year(Created) ) AS Date
Комментарии (0)

лучший способ сделать это с:

dateadd(month,datediff(month,0,*your_date*),0)

он сохранит ваш тип даты и времени

Комментарии (2)

возвращает полное имя месяца, -, полный год, например. Март-2017

CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate()))
Комментарии (1)

Преобразование даты в первую часть месяца позволяет группировать по порядку и по одному атрибуту, и это быстрее, чем я.

declare @mytable table(mydate datetime)
declare @date datetime
set @date = '19000101'
while @date < getdate() begin
    insert into @mytable values(@date)
    set @date = dateadd(day,1,@date)
end

select count(*) total_records from @mytable

select dateadd(month,datediff(month,0,mydate),0) first_of_the_month, count(*) cnt
from @mytable
group by dateadd(month,datediff(month,0,mydate),0)
Комментарии (0)

У меня была та же проблема, и, осмотревшись, я обнаружил это:

SELECT DATENAME(yyyy, date) AS year
FROM Income
GROUP BY DATENAME(yyyy, date)

Это работает отлично!

Комментарии (0)
---Lalmuni Demos---
create table Users
(
userid int,date_of_birth date
)
---insert values---
insert into Users values(4,'9/10/1991')

select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, 
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, 
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users
Комментарии (0)
cast(cast(sq.QuotaDate as date) as varchar(7))

дает формат "2006-04"

Комментарии (0)

Вопрос о SQL Server 2005, многие из ответов здесь для более поздней версии SQL Server.

select convert (varchar(7), getdate(),20)
--Typical output 2015-04

SQL Server 2005 не имеет функции даты которая была введена в SQL Server 2008

Комментарии (0)
  ,datename(month,(od.SHIP_DATE)) as MONTH_

Ответ: MONTH_ Январь Январь Сентябрь Октябрь Декабрь Октябрь Сентябрь

Комментарии (0)

Да, вы можете использовать datename (месяц, время), чтобы получить месяц в тексте.

Комментарии (0)

Это отличная работа.

DECLARE @pYear VARCHAR(4)

DECLARE @pMonth VARCHAR(2)

DECLARE @pDay VARCHAR(2)

SET @pYear  = RIGHT(CONVERT(CHAR(10), GETDATE(), 101), 4)

SET @pMonth = LEFT(CONVERT(CHAR(10), GETDATE(), 101), 2)

SET @pDay   = SUBSTRING(CONVERT(CHAR(10), GETDATE(), 101), 4,2)

SELECT @pYear,@pMonth,@pDay
Комментарии (0)

Следующее работает отлично! Я просто использовал это, попробуйте это.

date_format(date,'%Y-%c')
Комментарии (1)