原始的sql server表格式类似于,其中Time列为DateTime格式:
Name Count Time
路由器 3 2012.12.1
交换机 2 2011.12.1
防火墙 3 2010.12.1
集线器 4 2012.8.1
路由器 5 2012.12.1
交换机 1 2008.12.1
防火墙 2 2009.12.1
集线器 6 2011.8.1想要检索出一个每年发放多少设备的表格,格式如下,其中Time列不是DataTime,是字符:
Name Count Time
设备 1 2008年
设备 2 2009年
设备 3 2010年
设备 8 2011年
设备 12 2012年设想了一下,应该是要用存储过程,将2008,...,2012作为参数传递进去,select xxx where Time<2010 and Time >2011之类的方式来检索返回结果,但是还是不清楚具体怎么写代码实现,想问下大家意见。要求检索输出的格式要严格如上,无论是sql语句或是存储过程实现皆可,请指教,谢谢!SQL Server存储过程datetime

解决方案 »

  1.   

    重新编排格式如下:
    原始的sql server表格式类似于,其中Time列为DateTime格式:
    Name  Count Time
    路由器 3     2012.12.1
    交换机 2     2011.12.1
    防火墙 3     2010.12.1
    集线器 4     2012.8.1
    路由器 5     2012.12.1
    交换机 1     2008.12.1
    防火墙 2     2009.12.1
    集线器 6     2011.8.1想要检索出一个每年发放多少设备的表格,格式如下,其中Time列不是DataTime,是字符:
    Name Count Time
    设备  1      2008年
    设备  2      2009年
    设备  3      2010年
    设备  8      2011年
    设备  12     2012年
      

  2.   

    SELECT 
    Name = N'设备',
    [COUNT] = SUM([COUNT]),
    [TIME] = LTRIM(YEAR([Time])) + N'年'
    FROM tablename
    GROUP BY YEAR([Time])
    ORDER BY [TIME]
      

  3.   

    CREATE PROC up_test
    @begin INT, --开始年
    @end INT --结束年,注意@begin也可以等于@end
    AS  
    SELECT 
    Name = N'设备',
    [COUNT] = SUM([COUNT]),
    [TIME] = LTRIM(YEAR([Time])) + N'年'
    FROM tablename
    WHERE YEAR([Time]) BETWEEN @begin AND @end
    GROUP BY YEAR([Time])
    ORDER BY [TIME]
      

  4.   

    把DateTime格式的时间,转换成nvarchar
    select Nmae,sum(count)qty,year from(
    select Name,count,CONVERT(nvarchar(4),time,112)+'年' as year from Table
    )base
    group by Nmae,year 
    order by year
      

  5.   

    不好意思,上一条回复,name拼写错误把DateTime格式的时间,转换成nvarchar
    select Name,sum(count)qty,year 
    from( select Name,count,CONVERT(nvarchar(4),time,112)+'年' as year from Table)base 
    group by Name,year 
    order by year