如何在TSQL中转换日期列以仅显示月份和年份

时间:2019-06-26 18:17:47

标签: sql-server tsql date

我有一列名为DateId的{​​{1}}列,并将日期显示为int。我可以使用下面的查询将其转换为日期,但是我只想将其显示为月和年。

我有三列20190626DateIdCustomer,它们都来自同一张表。有很多客户每个月都有多次付款,我想将每个客户每个月的所有付款合并在一起,按月分组。

PayAmount

我得到的是

Select 
    Convert(Date, Convert(Char(8), DateId), 112) As [Date], 
    Sum(PayAmount), Customer 
from 
    Pay 
Group By 
    Customer, DateId

我想要什么:

DateId         PayAmount     Customer
--------------------------------------
2019-06-20       $100           A
2019-06-24       $200           B
2019-04-22       $100           B
2019-03-20       $300           A
2019-04-22       $100           B
2019-06-21       $200           A
2019-06-21       $100           B

2 个答案:

答案 0 :(得分:1)

另一个选择是使用隐式转换。在这种情况下,LEFT(DateID,7)

示例已更新为INT

Select DateID      = stuff(left(DateID,6),5,0,'-')
      ,[PayAmount] = sum([PayAmount])
      ,Customer
 From  YourTable
 Group By left(DateID,6),Customer

返回

DateID   PayAmount      Customer
2019-03  300            A
2019-06  300            A
2019-04  200            B
2019-06  300            B

答案 1 :(得分:0)

似乎您只需要ISO8601样式的前7个字符:

CONVERT(varchar(7),DateId,126)

如果您要保留date数据类型,则需要将日期“舍入”到月初。一种常见的实现方法是以下获取值和日期“ 0”(1900-01-01)之间月份差异的方法:

CONVERT(date,DATEADD(MONTH,DATEDIFF(MONTH, 0, DateId),0))

如果随后需要显示格式yyyy-MM,则可以在表示层中将其设置为格式。

如果您还需要按此分组,则将该表达式添加到GROUP BY子句中。