多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 數(shù)據(jù)庫 > sybase > 與MSSQL的dateadd函數(shù)功能一致的pb加強版時間函數(shù):f_dateadd

與MSSQL的dateadd函數(shù)功能一致的pb加強版時間函數(shù):f_dateadd

來源:程序員人生   發(fā)布時間:2014-05-30 18:36:03 閱讀次數(shù):3675次
   pb中關于datetime的函數(shù),總是把date和time分開來處理,沒有針對datetime進行直接增減的函數(shù),在實際使用中限制較大。
        用過MS SQL的程序員,都恨不得能夠把MS SQL中的dateadd及datediff函數(shù)搬過來用,但是這是不可能的,除非sybase意識到這一點。
        下面這個函數(shù)f_dateadd ,可以實現(xiàn)MS SQL的dateadd的所有功能,5自學網(wǎng),用法也是一樣的(不過,自學教程,第1個參數(shù)必須加上引號)。同時為了兼容pb本身的date類型,該函數(shù)還支持參數(shù)類型為date的日期的計算。如:f_dateadd( 'hh', 49, 2011-11-04) ,表示計算日期2011-11-04 (默認為0點)的49小時候的日期,函數(shù)返回的將是2011-11-06
 
global function any f_dateadd (string as_type, long ai, any aa_date); 
//在向指定日期(date或datetime)加上一段時間的基礎上,返回新的日期(date或datetime)值(與MSSQL的dateadd函數(shù)類似) 
 
choose case lower(as_type) 
    case 'hour','hh' //小時 
        return f_dateadd('s', ai * 3600, aa_date) 
    case 'minute','mi','n' //分鐘 
        return f_dateadd('s', ai * 60, aa_date) 
    case else 
end choose 
 
int li_t 
long li 
string ls 
datetime ldt 
date ld 
time lt 
boolean lb_date = false 
any la_return  
choose case classname(aa_date) 
    case 'datetime' 
        ldt = aa_date 
        ld = date(ldt) 
        lt = time(ldt) 
        la_return = datetime(blob('1900-01-01 00:00:00')) 
    case 'date' 
        ld = aa_date 
        lt = time('00:00:00') 
        ldt = datetime(ld, lt) 
        la_return = 1900-01-01 
        lb_date = true 
    case else 
        return datetime(blob('1900-01-01 00:00:00')) 
end choose 
         
if ai = 0 then goto label 
choose case lower(as_type) 
    case 'year','yy','yyyy' //年份 
        li = year(ld) + ai 
        if li < 1900 or li > 3000 then return la_return 
        ls = string(li) + string(ld, '-mm-dd') 
    case 'quarter','qq','q' //季度 
        li = month(ld) + 3 * ai 
        if mod(li,12) = 0 then 
            li_t = -1 
        else 
            li_t = li 
        end if 
        ls = string(year(ld) + int((li -1) / 12)) + string(mod(li, 12) - 6 * (sign(li) - 1), '-00') + string(ld, '-dd') 
    case 'month','mm','m' //月份 
        li = month(ld) + ai 
        if mod(li,12) = 0 then 
            li_t = -1    
        else 
            li_t = li    
        end if 
        ls = string(year(ld) + int((li -1) / 12)) + string(mod(li, 12) - 6 * (sign(li) - 1), '-00') + string(ld, '-dd') 
    case 'day','dd','d' //天數(shù) 
        ld = RelativeDate ( ld, ai ) 
        goto label 
    case 'week','wk','ww' //周數(shù) 
        ld = RelativeDate ( ld, ai * 7 ) 
        goto label 
    case 'hour','hh' //小時 
    case 'minute','mi','n' //分鐘 
    case 'second','ss','s' //秒 
        li = int(ai / 86400) 
        choose case SecondsAfter ( time(00:00:00), lt ) + mod(ai , 86400) 
            case is < 0 
                li -- 
            case is > 86400 
                li ++ 
        end choose 
        ld = f_dateadd('day', li, ld) 
        ls = string(lt, 'fff') //記錄毫秒 
        lt = RelativeTime(lt, mod(ai , 86400)) 
        lt = time(string(lt, 'hh:mm:ss.') + ls) 
        goto label 
    case 'millisecond','ms' //毫秒 
        li = int(ai / 1000) 
        ai = integer(string(lt,'fff')) + mod(ai , 1000) 
        choose case ai 
            case is < 0 
                li -- 
                ai = ai + 1000 
            case is > 1000 
                li ++ 
                ai = ai - 1000 
        end choose 
        if lb_date then 
            return f_dateadd('s', li, aa_date) 
        else 
            return f_dateadd('s', li, datetime(ld, time(string(lt, 'hh:mm:ss.') + string(ai)))) 
        end if 
    case else 
        return aa_date 
end choose 
 
if ls = '1900-01-01' then return la_return 
ld = date(ls) 
if ld = 1900-01-01 then ld = f_dateadd('dd', -1, f_dateadd('mm', 1, date(left(ls, 8) + '01'))) 
label: 
if lb_date then 
    return ld 
else 
    return datetime(ld, lt) 
end if 
end function 
 
 
 
        在網(wǎng)上搜了一下,發(fā)現(xiàn)已經(jīng)有人寫過f_dateadd函數(shù)了,大家可以自己看看



作者 yyoinge的專欄
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 玖玖五月| 日韩欧美亚 | 国产片在线观看 | 男人都懂的www网站免费观看 | www黄com| 女人18毛片a级毛片一区二区 | 国产视频一二三区 | 日本www在线 | 日本高清免费中文字幕不卡 | 久久精品国产亚洲a | 高清国产精品久久久久 | 福利片免费一区二区三区 | 中文字幕欧美日韩久久 | 91亚洲精品成人一区 | 亚洲国产精品免费在线观看 | 日韩大片在线观看 | 国产欧美久久久另类精品 | 免费中日高清无专码有限公司 | 亚洲乱码中文字幕综合 | 波多野结衣视频在线免费观看 | 日韩精品在线一区二区 | 欧美 日韩 中字 国产 | 日韩欧美国产精品第一页不卡 | 亚洲精品国自产拍影院 | 五月婷婷在线视频观看 | 国产福利一区二区三区视频在线 | 亚洲精品视频免费 | 国产女人成人精品视频 | 天天更新天天久久久更新影院 | 欧美黑人乱大交 | 亚洲肥妇 | 亚洲 自拍 欧美 综合 | 91精品免费在线观看 | 最近的中文字幕在线国语 | 毛色毛片免费看 | 欧美xxxx喷潮 | 欧美在线播放成人免费 | 免费在线h视频 | 亚洲综合精品成人 | videos雌雄同体xxxx视频 | 欧美专区亚洲专区 |