Мне нужно получить месяц+год из времени даты в SQL Server, например 'Jan 2008'. Я группирую запрос по месяцу, году. Я искал и нашел такие функции, как datepart, convert и т.д., но ни одна из них не кажется полезной для этого. Я что-то упустил? Есть ли функция для этого?
select
datepart(month,getdate()) -- integer (1,2,3...)
,datepart(year,getdate()) -- integer
,datename(month,getdate()) -- string ('September',...)
Если вы имеете в виду, что хотите вернуть их в виде строки, в этом формате;
SELECT
CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120)
FROM customers
Начиная с SQL Server 2012, вы можете использовать:
SELECT FORMAT(@date, 'yyyyMM')
Забавно, я просто играл вокруг, записывая этот же запрос в 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
В SQL Server 2012 можно использовать ниже
выберите FORMAT (getdate (), «MMM yyyy»)
Это дает точный «июнь 2016»
( Month(Created) + ',' + Year(Created) ) AS Date
лучший способ сделать это с:
dateadd(month,datediff(month,0,*your_date*),0)
он сохранит ваш тип даты и времени
возвращает полное имя месяца, -, полный год, например. Март-2017
CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate()))
Преобразование даты в первую часть месяца позволяет группировать по порядку и по одному атрибуту, и это быстрее, чем я.
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)
У меня была та же проблема, и, осмотревшись, я обнаружил это:
SELECT DATENAME(yyyy, date) AS year
FROM Income
GROUP BY DATENAME(yyyy, date)
Это работает отлично!
---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
cast(cast(sq.QuotaDate as date) as varchar(7))
дает формат "2006-04"
Вопрос о SQL Server 2005, многие из ответов здесь для более поздней версии SQL Server.
select convert (varchar(7), getdate(),20)
--Typical output 2015-04
SQL Server 2005 не имеет функции даты которая была введена в SQL Server 2008
,datename(month,(od.SHIP_DATE)) as MONTH_
Ответ: MONTH_ Январь Январь Сентябрь Октябрь Декабрь Октябрь Сентябрь
Да, вы можете использовать datename (месяц, время)
, чтобы получить месяц в тексте.
Это отличная работа.
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
Следующее работает отлично! Я просто использовал это, попробуйте это.
date_format(date,'%Y-%c')