sql从日期中提取年份,按年份求和

思路:先准备整个时间段的月份,然后对比统计;

--mssql:WITHTMPAS(SELECT'1994-1-1分钟,日期:START_DATE,“1994-12-1”,日期:END_DATE,100.00ASJS,1200.00ASZJSUNIONALLSELECT'1995-1-1','1995-5-1',100.00,500.00UNIONALLSELECT'1995-6-1','1998-3-1',100.00,34000.00),TMP1AS(选择日期(月)第NTH,T.NUMBER,T1.BEGAN_DATE)AST_MONTHFROMMASTER..SPT_VALUEST,(SELECTMIN(BEGAN_DATE)ASBEGAN_DATE,       DATEDIFF(MONTH,MIN(BEGAN_DATE),MAX(END_DATE))AST_MONTH       FROMTMP)T1WHERET.NUMBER<=T1.T_MONTHANDT.TYPE='P')SELECTDATENAME(YEAR,T1.T_MONTH)ASYEARS,SUM(T.JS)ASZJSFROMTMPTINNERJOINTMP1T1ONT1.T_MONTH>=CAST(T.BEGAN_DATEASDATE)ANDT1.T_MONTH<=CAST(T.END_DATEASDATE)GROUPBYDATENAME(YEAR,T1.T_MONTH),T.BEGAN_DATEORDERBYDATENAME(YEAR,T1.T_MONTH);--oracle:WITHTMPAS(SELECT'1994-1-1'ASBEGAN_DATE,'1994-12-1'ASEND_DATE,100.00ASJS,1200.00ASZJSFROMDUALUNIONALLSELECT'1995-1-1','1995-5-1',100.00,500.00FROMDUALUNIONALLSELECT'1995-6-1','1998-3-1',100.00,34000.00FROMDUAL),TMP1AS(SELECTADD_MONTHS(BEGAN_)DATE,LEVEL-1)T_MONTHFROM(SELECTTO_DATE(MIN(BEGAN_DATE),'YYYY-MM-DD')BEGAN_DATE,TO_DATE(MAX(END_DATE),'YYYY-MM-DD')END_DATEFROMTMP)LEVELCONNECTION<=MONTHS_BETWEEN(END_DATE,BEGAN_DATE)+1)CHOOSETO_CHAR(T_MONTH,'YYYY')ASYEARS,SUM(T.JS)ASZJSFROMTMPTINNERJOINTMP1T1ONT1.T_MONTH>=TO_DATE(T.BEGAN_DATE,'YYYY-MM-DD')ANDT1.T_MONTH<=TO_DATE(T.END_D)ATE,'YYYY-MM-DD')GROUPBYTO_CHAR(T_MONTH,'YYYY'),T.BEGAN_DATEORDERBYTO_CHAR(T_MONTH,'YYYY')

SQL语句如何从一个日期类型的数据中获取当中的年,月.日值是多少?

GetDate()获取当前日期。
年()年/月()月/日()日SELECTYEAR(GETDATE())ASDY,月(GETDATE())ASM,日(GETDATE())ASDYMD------------------------------2010429SELECTCONVERT(char(10),gETDATE(),120)ASCCCC----------2010-04-29日期类型是间隔参数。
并且可以使用加法和减法运算,没有天然的起源。
SELECTDATEDIFF(DAY,CAST('2009-01-01'ASDATETIME)),CAST('2009-03-11'ASDATETIME))ASdd----------69SELECTDATEADDED(日期,33,CAST('2009-01-01'ASDATETIME))ASdd-------------2009-02-0300:00:00.000关联函数方法及其他建议请参阅sqlserver文件以获取详细的示例和说明。
然而,要替换制造商指定的功能将很困难。