解决方案 »

  1.   

    DECLARE @a DATETIME
    SET @a='2014-03-15'
     SELECT DATEADD(month, DATEDIFF(month, '19991231', @a), '19991231');
      

  2.   

    不太懂啊,
    last_day(to_date('2014-03-15','yyyy-mm-dd'))
    和这个有什么不同啊
    还有我们一定要用19991231这天作为基准吗?这样做是不是麻烦了?
    多谢指教
      

  3.   

    你就把变量改改就行了,last_day在sqlserver中没有这个函数,你这个貌似是Oracle的吧?19991231这个只是基准,可以不用,你可以自己改一下,另外你先说清楚你要在Oracle运行的还是sqlserver的,
      

  4.   


    -- 建函数
    create function dbo.fn_getmonthlastday
    (@y int, --> 指定年份
     @m int  --> 指定月份
    ) returns varchar(20)
    as
    begin
     declare @x varchar(20) select @x=convert(varchar,
                       dateadd(d,-1,dateadd(m,1,rtrim(@y)+'-'+rtrim(@m)+'-01')),
                       111) return @x
    end
     -- 测试1
    select dbo.fn_getmonthlastday(2014,3) '月份最后一天'
    /*
    月份最后一天
    --------------------
    2014/03/31(1 row(s) affected)
    */
    -- 测试2
    select dbo.fn_getmonthlastday(2014,2) '月份最后一天'
    /*
    月份最后一天
    --------------------
    2014/02/28(1 row(s) affected)
    */
    -- 测试3
    select dbo.fn_getmonthlastday(2013,12) '月份最后一天'
    /*
    月份最后一天
    --------------------
    2013/12/31(1 row(s) affected)
    */
      

  5.   

    你就把变量改改就行了,last_day在sqlserver中没有这个函数,你这个貌似是Oracle的吧?19991231这个只是基准,可以不用,你可以自己改一下,另外你先说清楚你要在Oracle运行的还是sqlserver的,
    谢谢啦,用的SQLServer2008R2
      

  6.   

    谢谢啦,用的SQLServer2008R2试试这个:
    select dateadd(day,-1,dateadd(month,1,'2008-06'+'-01'))
    /*
    2008-06-30 00:00:00.000
    */
      

  7.   

    select DATEADD(MONTH,DATEDIFF(MONTH,'20130101',GETDATE()),'20130101')
    详细解释:
    select CONVERT(varchar(8),GETDATE(),120)+'01'
    --2014-03-01
    select CONVERT(datetime,CONVERT(varchar(8),GETDATE(),120)+'01',120)
    --2014-03-01 00:00:00.000--2. 显示本月最后一天 
    select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120)) 
    SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)) 
    --本月最后一天最好的sql语句--
    select DATEADD(MONTH,DATEDIFF(MONTH,'19911231',GETDATE()),'19911231')详细解释:
    select DATEDIFF(MONTH,'19911231',GETDATE())
    --267
    select DATEADD(MONTH,DATEDIFF(MONTH,'19911231',GETDATE()),'19911231')
    --2014-03-31 00:00:00.000这个表达式是先以月为单位,以某个月的最后一天为锚点日期,(19911231),
    计算它和给定日期的差值,把这个差值记为 diff ,之后再把 diff个月加到锚点日期上,就得到了给定日期所在月份的最后一天
    锚点日期可以换,不过必须是某月的最后一天