从SQL Server 2005中的日期时间获取月份和年份

从SQL Server 2005中的日期时间获取月份和年份

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


推荐阅读