none
sqlserver加月时间问题 RRS feed

  • 常规讨论

  • 

    DATEADD(mm,1,CONVERT(datetime,'2013-02-28'))结果为:2013-03-28  我是加一个月我想得到的答案是:2013-03-31
    select DATEADD(mm,1,CONVERT(datetime,'2013-04-30'))
    结果为:2013-05-30 而我想得到2013-05-31
    

    但是:DateAdd(mm,1,convert(datetime,'2013-02-12'))结果为2013-03-12

    有什么简单的方法,可以让他真正的加一个月,有人说我这是两种规则

    


    man

    2013年1月9日 2:46

全部回复

  • 你可以判断一下(CASE WHEN ), 如果+1天是1号的话, 那么用 +1 天 + 1 月 - 1天的方法, 否则直接+1月

    2013年1月9日 3:16
  • 每月的天数不同,所以月是个动态的。。所以就没有加真正的一个月的统一标准

    要明确得到下月底,就先得到下月,再计算下下月减1天


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年1月9日 5:24
  • 不曉得你的SQL SERVER是哪個版本?如過是2012的話EOMONTH函式應該符合你的需求。

    EOMONTH ( start_date [, month_to_add ] )

    參考資料:http://msdn.microsoft.com/en-us/library/hh213020.aspx


    以上說明若有錯誤請指教,謝謝。

    | 台灣 SQL PASS 社群 | SQL PASS Taiwan

    | 歡迎參觀我的BLOG - 積沙成塔

    2013年1月9日 6:26
  • 如果你的SQL SERVER是2012以前的版本,可以試試看利用下列的指令碼來看看是否符合你的需求:

    DECLARE @D DATETIME = '20130228'
    		,@increment int = 1
    
    SELECT DATEADD(d,-1,CONVERT(datetime,LEFT(CONVERT(char(8),DATEADD(M,@increment + 1,@D),112),6) + '01'))
    
    SET @D = '20130430'
    
    SELECT DATEADD(d,-1,CONVERT(datetime,LEFT(CONVERT(char(8),DATEADD(M,@increment + 1,@D),112),6) + '01'))


    以上說明若有錯誤請指教,謝謝。

    | 台灣 SQL PASS 社群 | SQL PASS Taiwan

    | 歡迎參觀我的BLOG - 積沙成塔

    2013年1月9日 6:39
  • 你这个规则确实和别人的不同。

    如果说2-28加一个月是3-31,那么2-27加一个月是哪天呢?如果2-27加一个月是3-30,那么2-1加一个月是哪天?

    如果你只要月底,参考楼上TerryChuang的答案。


    想不想时已是想,不如不想都不想。

    2013年1月10日 5:56
    版主
  • 被他们做业务搞的头晕,但是又没有办法反对,因为按照常人理解,2013-02-12 加1个月是2013-03-12,2013-02-28加1个月是2013-03-31,2013-04-30加1个月是2013-05-31

    man


    • 已编辑 Mr Air 2013年1月11日 3:31
    2013年1月11日 3:30
  • 你好,

    常理确实是你说的这样的,也可以理解你的心情,可是按照你的常理,那如果是2013-02-27 加一个月不就是2013-03-30了,2013-02-26 加一个月不就是2013-03-29了,那这样2013-02-01是2013-03-01呢 还是其他的啊。这样时间就乱套了啊。

    所以你就麻烦客户多记点东西,只要加了一个月后是2013-03-28的,那就是默认为2012-02-28了。

    Thanks,


    Amy Peng
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2013年1月11日 9:09
    版主
  • 说的不错

    man

    2013年1月31日 7:41