Get month and year from a datetime in SQL Server 2005
我需要像'Jan 2008'这样的SQL Server中日期时间的月份+年。 我按月,年对查询进行分组。 我已经搜索并找到了诸如datepart,convert等功能,但是它们似乎都没有用。 我在这里想念什么吗? 有这个功能吗?
1 2 3 4
| SELECT
datepart(MONTH,getdate()) -- integer (1,2,3...)
,datepart(YEAR,getdate()) -- integer
,datename(MONTH,getdate()) -- string ('September',...) |
如果您要让它们以字符串形式返回,则应采用这种格式;
1 2 3
| SELECT
CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120)
FROM customers |
这是其他格式选项
从SQL Server 2012开始,您可以使用:
1
| SELECT FORMAT(@DATE, 'yyyyMM') |
采用:
1 2
| SELECT datepart(mm,getdate()) --to get month value
SELECT datename(mm,getdate()) --to get name of month |
有趣的是,我只是在四处游玩,在SQL Server和LINQ中编写相同的查询。
1 2 3 4 5 6 7 8 9
| 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 |
它产生以下输出(示例)。
1 2 3
| MONTH | YEAR | Total
January | 2009 | 2 |
在SQL Server 2012中,可以使用以下内容
选择FORMAT(getdate(),'MMM yyyy')
这给出了确切的" 2016年6月"
这个怎么样?
1
| SELECT DateName( MONTH, getDate() ) + ' ' + DateName( YEAR, getDate() ) |
1
| ( MONTH(Created) + ',' + YEAR(Created) ) AS DATE |
最好的方法是:
1
| dateadd(MONTH,datediff(MONTH,0,*your_date*),0) |
它将保留您的日期时间类型
该格式不存在。您需要将两件事结合起来,
1
| SELECT CONVERT(VARCHAR(4),getdate(),100) + CONVERT(VARCHAR(4),YEAR(getdate())) |
返回完整的月份名称--完整的年份,例如March-2017
1
| CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate())) |
我遇到了同样的问题,环顾四周后发现:
1 2 3
| SELECT DATENAME(yyyy, DATE) AS YEAR
FROM Income
GROUP BY DATENAME(yyyy, DATE) |
效果很好!
将日期转换为每月的第一天,可以使您根据单个属性进行分组和排序,根据我的经验,它更快。
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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) |
1 2 3 4 5 6 7 8 9 10 11 12
| ---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 |
1
| CAST(CAST(sq.QuotaDate AS DATE) AS VARCHAR(7)) |
给出" 2006-04"格式
问题是有关SQL Server 2005的,这里的许多答案都是针对更高版本的SQL Server的。
1 2
| SELECT CONVERT (VARCHAR(7), getdate(),20)
--Typical output 2015-04 |
SQL Server 2005不具有SQL Server 2008中引入的日期功能
是的,您可以使用datename(month,intime)来获取文本月份。
很好
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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 |
1
| ,datename(MONTH,(od.SHIP_DATE)) AS MONTH_ |
回答:
月_
一月
一月
九月
十月
十二月
十月
九月
以下工作完美!我只是用它,尝试一下。
1
| date_format(DATE,'%Y-%c') |
|