本文为【ASP实现SQL语句日期格式的加减运算】的汉字拼音对照版显示拼音
今jin天tian在zai工gong作zuo中zhong遇yu到dao了le一yi个ge问wen题ti,需xu要yao按an时shi间jian查cha询xun,可ke是shi查cha询xun出chu来lai的de结jie果guo显xian示shi的de不bu正zheng确que。举ju个ge例li子zi来lai说shuo,要yao查cha找zhao出chu2007-10-12至zhi2007-10-31之zhi间jian在zai网wang站zhan上shang注zhu册ce的de会hui员yuan,选xuan择ze好hao日ri期qi后hou,点dian击ji“查cha询xun”按an钮niu,发fa现xian2007-10-31注zhu册ce的de会hui员yuan的de信xin息xi根gen本ben没mei有you显xian示shi出chu来lai,试shi验yan了le几ji次ci结jie果guo都dou是shi一yi样yang。调tiao试shi程cheng序xu发fa现xian,原yuan来lai是shi在zaiSQL语yu句ju这zhe里li出chu现xian了le问wen题ti。
SQL语yu句ju如ru下xia:SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'。初chu看kan上shang去qu这zhe条tiaoSQL语yu句ju没mei有you错cuo误wu,可ke是shi对dui照zhao数shu据ju库ku中zhong相xiang应ying字zi段duan保bao存cun的de值zhi以yi后hou,发fa现xian保bao存cun的de值zhi并bing不bu是shi简jian单dan的de日ri期qi形xing式shi,而er是shi日ri期qi+时shi间jian的de形xing式shi,即ji:yyyy-MM-dd HH:mm:ss,这zhe时shiSQL语yu句ju在zai判pan断duanregtime和he'2007-10-31'的de大da小xiao时shi,会hui认ren为wei'2007-10-31'写xie的de不bu完wan整zheng,所suo以yi不bu会hui认ren为wei这zhe两liang个ge值zhi是shi相xiang等deng的de。这zhe可ke怎zen么me办ban呢ne?
不bu用yong着zhe急ji,ASP为wei我wo们men提ti供gong了le日ri期qi加jia减jian的de函han数shu,来lai帮bang我wo们men解jie决jue这zhe一yi问wen题ti。
1.日ri期qi相xiang加jia
DateAdd 函han数shu
返fan回hui已yi添tian加jia指zhi定ding时shi间jian间jian隔ge的de日ri期qi。
DateAdd(interval, number, date)
DateAdd 函han数shu的de语yu法fa有you以yi下xia参shen数shu
(1)interval 必bi选xuan项xiang。字zi符fu串chuan表biao达da式shi,表biao示shi要yao添tian加jia的de时shi间jian间jian隔ge。有you关guan数shu值zhi,请qing参shen阅yue“设she置zhi”部bu分fen。
(2)number 必bi选xuan项xiang。数shu值zhi表biao达da式shi,表biao示shi要yao添tian加jia的de时shi间jian间jian隔ge的de个ge数shu。数shu值zhi表biao达da式shi可ke以yi是shi正zheng数shu(得de到dao未wei来lai的de日ri期qi)或huo负fu数shu(得de到dao过guo去qu的de日ri期qi)。
(3)date 必bi选xuan项xiang。Variant 或huo要yao添tian加jia interval 的de表biao示shi日ri期qi的de文wen字zi。
说shuo明ming
可ke用yong DateAdd 函han数shu从cong日ri期qi中zhong添tian加jia或huo减jian去qu指zhi定ding时shi间jian间jian隔ge。例li如ru可ke以yi使shi用yong DateAdd 从cong当dang天tian算suan起qi 30 天tian以yi后hou的de日ri期qi或huo从cong现xian在zai算suan起qi 45 分fen钟zhong以yi后hou的de时shi间jian。要yao向xiang date 添tian加jia以yi“日ri”为wei单dan位wei的de时shi间jian间jian隔ge,可ke以yi使shi用yong“一yi年nian的de日ri数shu”(“y”)、“日ri”(“d”)或huo“一yi周zhou的de日ri数shu”(“w”)。
DateAdd 函han数shu不bu会hui返fan回hui无wu效xiao日ri期qi。如ru下xia示shi例li将jiang 95 年nian 1 月yue 31 日ri加jia上shang一yi个ge月yue:
NewDate = DateAdd("m", 1, "31-Jan-95")
在zai这zhe个ge示shi例li中zhong,DateAdd 返fan回hui 95 年nian 2 月yue 28 日ri,而er不bu是shi 95 年nian 2 月yue 31 日ri。如ru果guo date 为wei 96 年nian 1 月yue 31 日ri,则ze返fan回hui 96 年nian 2 月yue 29 日ri,这zhe是shi因yin为wei 1996 是shi闰run年nian。
如ru果guo计ji算suan的de日ri期qi是shi在zai公gong元yuan 100 年nian之zhi前qian,则ze会hui产chan生sheng错cuo误wu。
如ru果guo number 不bu是shi Long 型xing值zhi,则ze在zai计ji算suan前qian四si舍she五wu入ru为wei最zui接jie近jin的de整zheng数shu。
2.日ri期qi相xiang减jian
DateDiff 函han数shu
返fan回hui两liang个ge日ri期qi之zhi间jian的de时shi间jian间jian隔ge。
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
DateDiff 函han数shu的de语yu法fa有you以yi下xia参shen数shu:
(1)interval 必bi选xuan项xiang。字zi符fu串chuan表biao达da式shi,表biao示shi用yong于yu计ji算suan date1 和he date2 之zhi间jian的de时shi间jian间jian隔ge。有you关guan数shu值zhi,请qing参shen阅yue“设she置zhi”部bu分fen。
(2)date1, date2 必bi选xuan项xiang。日ri期qi表biao达da式shi。用yong于yu计ji算suan的de两liang个ge日ri期qi。
(3)Firstdayofweek 可ke选xuan项xiang。指zhi定ding星xing期qi中zhong第di一yi天tian的de常chang数shu。如ru果guo没mei有you指zhi定ding,则ze默mo认ren为wei星xing期qi日ri。有you关guan数shu值zhi,请qing参shen阅yue“设she置zhi”部bu分fen。
(4)Firstweekofyear 可ke选xuan项xiang。指zhi定ding一yi年nian中zhong第di一yi周zhou的de常chang数shu。如ru果guo没mei有you指zhi定ding,则ze默mo认ren为wei 1 月yue 1 日ri所suo在zai的de星xing期qi。有you关guan数shu值zhi,请qing参shen阅yue“设she置zhi”部bu分fen。
说shuo明ming
DateDiff 函han数shu用yong于yu判pan断duan在zai两liang个ge日ri期qi之zhi间jian存cun在zai的de指zhi定ding时shi间jian间jian隔ge的de数shu目mu。例li如ru可ke以yi使shi用yong DateDiff 计ji算suan两liang个ge日ri期qi相xiang差cha的de天tian数shu,或huo者zhe当dang天tian到dao当dang年nian最zui后hou一yi天tian之zhi间jian的de星xing期qi数shu。
要yao计ji算suan date1 和he date2 相xiang差cha的de天tian数shu,可ke以yi使shi用yong“一yi年nian的de日ri数shu”(“y”)或huo“日ri”(“d”)。当dang interval 为wei“一yi周zhou的de日ri数shu”(“w”)时shi,DateDiff 返fan回hui两liang个ge日ri期qi之zhi间jian的de星xing期qi数shu。如ru果guo date1 是shi星xing期qi一yi,则ze DateDiff 计ji算suan到dao date2 之zhi前qian星xing期qi一yi的de数shu目mu。此ci结jie果guo包bao含han date2 而er不bu包bao含han date1。如ru果guo interval 是shi“周zhou”(“ww”),则ze DateDiff 函han数shu返fan回hui日ri历li表biao中zhong两liang个ge日ri期qi之zhi间jian的de星xing期qi数shu。函han数shu计ji算suan date1 和he date2 之zhi间jian星xing期qi日ri的de数shu目mu。如ru果guo date2 是shi星xing期qi日ri,DateDiff 将jiang计ji算suan date2,但dan即ji使shi date1 是shi星xing期qi日ri,也ye不bu会hui计ji算suan date1。
如ru果guo date1 晚wan于yu date2,则ze DateDiff 函han数shu返fan回hui负fu数shu。
firstdayofweek 参shen数shu会hui对dui使shi用yong“w”和he“ww”间jian隔ge符fu号hao的de计ji算suan产chan生sheng影ying响xiang。
如ru果guo date1 或huo date2 是shi日ri期qi文wen字zi,则ze指zhi定ding的de年nian度du会hui成cheng为wei日ri期qi的de固gu定ding部bu分fen。但dan是shi如ru果guo date1 或huo date2 被bei包bao括kuo在zai引yin号hao (" ") 中zhong并bing且qie省sheng略lue年nian份fen,则ze在zai代dai码ma中zhong每mei次ci计ji算suan date1 或huo date2 表biao达da式shi时shi,将jiang插cha入ru当dang前qian年nian份fen。这zhe样yang就jiu可ke以yi编bian写xie适shi用yong于yu不bu同tong年nian份fen的de程cheng序xu代dai码ma。
在zai interval 为wei“年nian”(“yyyy”)时shi,比bi较jiao 12 月yue 31 日ri和he来lai年nian的de 1 月yue 1 日ri,虽sui然ran实shi际ji上shang只zhi相xiang差cha一yi天tian,DateDiff 返fan回hui 1 表biao示shi相xiang差cha一yi个ge年nian份fen。
【原文】