如何从日期时间数据类型SQL中过滤出月份和年份?

时间:2019-02-21 14:19:49

标签: sql sql-server

我有一个表Invoices,其中的列INVOICE_DATE具有日期时间数据类型。这是一个示例:

2013-06-24 05:34:31.990

我想用月和年填充一个新的计算列,称为期间。我期望像这样:

May'17 or May 2017

这是我尝试过的:

Declare @start datetime ='2010-01-01 08:56:01.490'
Declare @end datetime ='2010-01-06 06:51:31.867'



SELECT      Brands$.BRAND_NAME
FROM        Brands$
EXCEPT
SELECT      DISTINCT Brands$.BRAND_NAME, concat(DateName(MONTH,@start),' ''',right(DateName(YEAR,@start),2))
FROM                       Brands$
        INNER JOIN Products$ ON Brands$.BRAND_ID = Products$.BRAND_ID
        INNER JOIN InvDetails$ ON Products$.PRODUCT_ID = InvDetails$.PRODUCT_ID
        INNER JOIN Invoices$ ON Invoices$.INVOICE_ID = InvDetails$.INVOICE_ID
        WHERE Invoices$.INVOICE_DATE BETWEEN @start AND @end
GROUP BY                  BRAND_NAME

我收到错误消息:

  

信息205,级别16,状态1,第90行,所有查询使用   UNION,INTERSECT或EXCEPT运算符必须具有相同数量的   目标列表中的表达式。

2 个答案:

答案 0 :(得分:0)

另一个选项是DateName()和Concat()

示例

Declare @D datetime ='2013-06-24 05:34:31.990'

Select concat(DateName(MONTH,@D),' ''',right(DateName(YEAR,@D),2))

返回

June '13

答案 1 :(得分:0)

您可以借助datename函数。

select  datename(month,INVOICE_DATE)+' '+datename(year,INVOICE_DATE) as period ,
datename(month,INVOICE_DATE)+''''+RIGHT(datename(yyyy,INVOICE_DATE), 2)  as period2
from INVOICE