mysql转DM的日期函数转换

背景:

   项目要从mysql转换为DM数据库,发现很多日期函数在DM是不能用的. 所以大概总结下有哪些,以及转换思路.

正文:

   INTERVAL 表示日期间隔. 看做拼接符.

   DATE_ADD 表示日期相加运算.

  timestampdiff(unit,begin,end) 计算差值,unit是差值的单位

  date_sub(date,interval expr type),函数从日期减去指定的时间间隔.

    注意: 这个比较特殊 . select date_sub(CURRENT_TIMESTAMP(),interval - 4 day)  表示当前时间的4天后

 

转换demo

  1. DAY ( #{startDay} )  转换为: DATE_FORMAT(#{startDay},'%d') 

  2. DAY(last_day( #{startDay} ) )  转换为: DATE_FORMAT(last_day( #{startDay} ),'%d') 

  3. (SELECT DATE_ADD( curdate(), INTERVAL - DAY ( curdate())+ id DAY ) AS dt
    转换为:
    select to_char( CURRENT_Date - DATE_FORMAT(CURRENT_Date,'%d') + 1 ,'yyyy-mm-dd') 

  4. DATE_SUB日期间隔相反. +4 表示当前日期的前面4天. -4表示当前日期往后推迟4天

    select DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL + 1 DAY)
    转换为:
    select CURRENT_TIMESTAMP() - 1

  5. DATE_ADD( #{startDay}, INTERVAL + id - DAY ( #{startDay} ) DAY ) AS dt 

    分步解释:

    转换为 内部日期相加.
    1. #{startDay}字符串转date
      to_date(#{startDay},'yyyy-mm-dd')
    2. DAY ( #{startDay} ) 转天数
      DATE_FORMAT(#{startDay},'%d')
    3. to_char拼接起来
      to_char( to_date(#{startDay},'yyyy-mm-dd') + id - DATE_FORMAT(#{startDay},'%d') , 'yyyy-mm-dd' )

    ps:这里date_add加最好只用to_char来转,我试了to_date是报错的.

   6. TIMESTAMPDIFF( DAY, CURRENT_DATE, b.bj_end_time )  这里DM也是支持day,hour这种作为单位的. 

    转换为:

            select TIMESTAMPDIFF(DAY,CURRENT_Date,CURRENT_Date) 

  7. if函数出现问题. 

    DM是支持select IF( 1==1, 2, 0) 这种写法的. 

    但是不支持 类型为null或者date类型的. 

  8. DateDiff

    这个和TIMESTAMPDIFF用法类似. 

    代码里面是: DATEDIFF( CURRENT_TIMESTAMP, a.deadline )

    改造后是: DATEDIFF( DAY,CURRENT_TIMESTAMP, a.deadline )

    

posted @ 2022-10-17 11:37  学海无涯乐在其中  阅读(587)  评论(0)    收藏  举报