电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> Asp>>1句话日期函数的13种写法:

1句话日期函数的13种写法

来源:网络 | 2007-5-26 | (有4044人读过)

可以直接赋值给变量,不用写成函数形式的。另函数适用于pb6.5,一个汉字占两个字节,如果用于pb8.0以上请根据实际情况修改 

//1.生肖(年份参数:int ls_year  返回参数:string): 
mid(fill(’鼠牛虎兔龙蛇马羊猴鸡狗猪’,48),(mod(ls_year -1900,12)+13)*2 -1,2) 


//2.天干地支(年份参数:int ls_year  返回参数:string): 
mid(fill(’甲乙丙丁戊己庚辛壬癸’,40),(mod(ls_year -1924,10)+11)*2 -1,2)+mid(fill(’子丑寅卯辰巳午未申酉戌亥’,48),(mod(ls_year -1924,12)+13)*2 -1,2) 


//3.星座(日期参数:date ls_date  返回参数:string): 
mid("摩羯水瓶双鱼白羊金牛双子巨蟹狮子处女天秤天蝎射手摩羯",(month(ls_date)+sign(sign(day(ls_date) -(19+integer(mid(’102123444423’,month(ls_date),1))))+1))*4 -3,4)+’座’ 

//4.判断闰年(年份参数:int ls_year  返回参数:int 0=平年,1=闰年): 
abs(sign(mod(sign(mod(abs(ls_year),4))+sign(mod(abs(ls_year),100))+sign(mod(abs(ls_year),400)),2)) -1) 


//5.某月天数(日期参数:date ls_date  返回参数:int): 
integer(28+integer(mid(’3’+string(abs(sign(mod(sign(mod(abs(year(ls_date)),4))+sign(mod(abs(year(ls_date)),100))+sign(mod(abs(year(ls_date)),400)),2)) -1))+’3232332323’,month(ls_date),1))) 


//6.某月最后一天日期(日期参数:date ls_date  返回参数:date): 
date(year(ls_date),month(ls_date),integer(28+integer(mid(’3’+string(abs(sign(mod(sign(mod(abs(year(ls_date)),4))+sign(mod(abs(year(ls_date)),100))+sign(mod(abs(year(ls_date)),400)),2)) -1))+’3232332323’,month(ls_date),1)))) 


//7.另一个求某月最后一天日期(日期参数:date ls_date  返回参数:date): 
a. 
RelativeDate (date(year(ls_date)+sign(month(ls_date) -12)+1,mod(month(ls_date)+1,13)+abs(sign(mod(month(ls_date)+1,13)) -1),1),-1) 
b. 
RelativeDate(date(year(ls_date)+integer(month(ls_date)/12),mod(month(ls_date),12)+1,1),-1) 


//8.另一个求某月天数(日期参数:date ls_date  返回参数:int): 
a. 
day(RelativeDate (date(year(ls_date)+sign(month(ls_date) -12)+1,mod(month(ls_date)+1,13)+abs(sign(mod(month(ls_date)+1,13)) -1),1),-1)) 
b. 
day(RelativeDate(date(year(ls_date)+integer(month(ls_date)/12),mod(month(ls_date),12)+1,1),-1)) 


//9.某月某日星期几--同PB系统函数DayName(日期参数:date ls_date  返回参数:string): 
’星期’+mid(’日一二三四五六’,(mod(year(ls_date) -1 + int((year(ls_date) -1)/4) - int((year(ls_date) -1)/100) + int((year(ls_date) -1)/400) + daysafter(date(year(ls_date),1,1),ls_date)+1,7)+1)*2 -1,2) 


//10.求相隔若干月份后的相对日期(日期参数:date ls_date 相隔月份(可取负数):int ls_add_month 返回参数:date): 
date(year(ls_date)+int((month(ls_date)+ls_add_month)/13),long(mid(fill(’010203040506070809101112’,48),(mod(month(ls_date)+ls_add_month -1,12)+13)*2 -1,2)),day(ls_date) -integer(right(left(string(day(RelativeDate (date(year(ls_date)+int((month(ls_date)+ls_add_month)/13)+sign(long(mid(fill(’010203040506070809101112’,48),(mod(month(ls_date)+ls_add_month -1,12)+13)*2 -1,2)) -12)+1,mod(long(mid(fill(’010203040506070809101112’,48),(mod(month(ls_date)+ls_add_month -1,12)+13)*2 -1,2))+1,13)+abs(sign(mod(long(mid(fill(’010203040506070809101112’,48),(mod(month(ls_date)+ls_add_month -1,12)+13)*2 -1,2))+1,13)) -1),1),-1)) -day(ls_date),’00’)+’00000’,5),3))/100) 


//11.求某日在当年所处的周数(日期参数:date ls_date  返回参数:int): 
//a.周始日为星期天 
//a1 
abs(int(-((daysafter( RelativeDate(date(year(ls_date),1,1), -mod(year(ls_date) -1 + int((year(ls_date) -1)/4) - int((year(ls_date) -1)/100) + int((year(ls_date) -1)/400) + 1,7) +1),ls_date)+1)/7))) 
//a2(使用DayNumber函数) 
abs(int(-((daysafter( RelativeDate(date(year(ls_date),1,1), -DayNumber(date(year(ls_date),1,1))+1),ls_date)+1)/7))) 

//b.周始日为星期一 
//b1 
abs(int(-((daysafter( RelativeDate(date(year(ls_date),1,1), -integer(mid(’6012345’,mod(year(ls_date) -1 + int((year(ls_date) -1)/4) - int((year(ls_date) -1)/100) + int((year(ls_date) -1)/400) + 1,7),1))),ls_date)+1)/7))) 
//b2(使用DayNumber函数) 
abs(int(-((daysafter( RelativeDate(date(year(ls_date),1,1), -integer(mid(’6012345’,DayNumber(date(year(ls_date),1,1)),1))),ls_date)+1)/7))) 

//12.求某日相对于过去某一日期所处的周数(日期参数:date ls_date_1(要求的某日),ls_date_2(过去的某日)  返回参数:int): 
//注:ls_date_1>ls_date_2 
//a.周始日为星期天 
//a1 
abs(int(-((daysafter( RelativeDate(ls_date_2, -mod(year(ls_date_2) -1 + int((year(ls_date_2) -1)/4) - int((year(ls_date_2) -1)/100) + int((year(ls_date_2) -1)/400) + daysafter(date(year(ls_date_2),1,1),ls_date_2)+ 1,7) +1),ls_date_1)+1)/7))) 
//a2(使用DayNumber函数) 
abs(int(-((daysafter( RelativeDate(ls_date_2, -DayNumber(ls_date_2)+1),ls_date_1)+1)/7))) 

//b.周始日为星期一 
//b1 
abs(int(-((daysafter( RelativeDate(ls_date_2, -integer(mid(’6012345’,mod(year(ls_date_2) -1 + int((year(ls_date_2) -1)/4) - int((year(ls_date_2) -1)/100) + int((year(ls_date_2) -1)/400) + daysafter(date(year(ls_date_2),1,1),ls_date_2)+ 1,7) ,1))),ls_date_1)+1)/7))) 
//b2(使用DayNumber函数) 
abs(int(-((daysafter( RelativeDate(ls_date_2, -integer(mid(’6012345’,DayNumber(ls_date_2),1))),ls_date_1)+1)/7))) 


以上转贴,以下补充,欢迎大家一起来补充    昕晨 2004.6 


13  PB中 DaysAfter ( date1, date2 ) 只能返回日期类型相差天数,SecondsAfter ( time1, time2 )只能返回时间相差妙,没有真对日期时间类型的函数,可以用下面一条语句实现: 

lont ll_allseconds 

datetime ldt_bgn,ldt_end 

ll_allseconds=(daysafter(date(ldt_bgn),date(ldt_end))*86400+SecondsAfter(time(ldt_bgn),time(ldt_end))) 

//返回两个DATETIME相差妙,如果要得到相差分钟,就 除以60就行,得到小时类似。   

14.上面对于当他所在的周,所在的月等处理很麻烦,我这里提供几个语句供大家参考: 

字段说明:Dv_bbs1 为表名,username 为发贴用户名(字符型),dateandtime 为发贴时间(日期时间型)。数据库为 SQL SERVER 2000 

复杂方法: 

今日发贴排名 

select top 10 username,count(username) from Dv_bbs1 where CONVERT(char(10),dateandtime) = CONVERT(char(10),getdate()) group by username order by count(username) desc 

昨日发贴排名 

select top 10 username,count(username) from Dv_bbs1 where CONVERT(char(10),dateandtime) = CONVERT(char(10),dateadd(day,-1,GetDate())) group by username order by count(username) desc 

本周发贴排名 

select top 10 username,count(username) from Dv_bbs1 where CONVERT(char(10),dateandtime) >= CONVERT(char(10),dateadd(day,2 - DATEPART(dw, GETDATE()),GetDate())) and CONVERT(char(10),dateandtime)<=CONVERT(char(10),dateadd(day,8 - DATEPART(dw, GETDATE()),GetDate())) group by username order by count(username) desc 

本月发贴排名 

select top 10 username,count(username) from Dv_bbs1 where convert(datetime,CONVERT(char(10),dateandtime)) >= convert(datetime,CONVERT(char(2),getdate())+’ 01 ’+CONVERT(char(4),year(getdate())) ) group by username order by count(username) desc  

发贴总排名 

select top 10 username,count(username) from Dv_bbs1 group by username order by count(username) desc 

简单语句: 

今日发贴排名 

select top 10 username,count(username) from Dv_bbs1 where datepart(y,dateandtime)=datepart(y,getdate()) and boardid = 85 group by username order by count(username) desc 

昨日发贴排名 

select top 10 username,count(username) from Dv_bbs1 where datepart(y,dateandtime)=datepart(y,getdate()-1) and boardid = 85 group by username order by count(username) desc 

本周发贴排名 

select top 10 username,count(username) from Dv_bbs1 where datepart(ww,dateandtime)=datepart(ww,getdate()) and boardid = 85 group by username order by count(username) desc 

本月发贴排名 

select top 10 username,count(username) from Dv_bbs1 where datepart(m,dateandtime)=datepart(m,getdate()) and boardid = 85 group by username order by count(username) desc 

其中本周排名是以星期天为第一天,假如要以星期一为第一天就是 
select top 10 username,count(username) from Dv_bbs1 where datepart(ww,dateandtime-1)=datepart(ww,getdate() - 1) and boardid = 85 group by username order by count(username) desc
Asp热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2020 电脑爱好者 版权所有 备案号:鲁ICP备09059398号