大家五一快乐!

出差回来了,这两天忙死,遇到整风运动+月底盘点

还好明天就放假了,五一又可以玩三天,终于可以舒服地耍三天。。。

公司的领导些五一要去农家乐开啥子战略研讨会,要开三天

还好我不是啥领导,自己在家当宅男,陪老婆休息

星期天是我二十七岁生日,岳父和姐夫要来玩,呵呵。。。

我和老婆结婚满一年了,去年4月29日扯的结婚证,到今天整整一年了

时间过的真快啊,已经结婚一年了。

昨天给老婆买了一个小蛋糕,十多块钱,本来看中一个心形的水果蛋糕

要200多元,我和老婆都是“过日子”型的人

要花200确实太贵了,于是买了两个小蛋糕,小小地意思一下就行了。

山不在高,有仙成名,水不在深,有龙则灵

意思一下,记住这个日子就OK啦。

Posted in 我的生活 at April 30, 2009. by 傻猫 .    Views: 4726    1 Comment

出差感悟

没出过远门,从98年到现在,基本是两点一线,老家——成都,

读书的时候寒暑假回家一次,一年下来就也回家两次,

工作以后,就只有春节才有时候回家了,

所以最近这10年间基本上都待在成都,这次突然来到重庆,真的很不习惯,

出来以后才深深明白“成都是一座来了就不想离开的城市”这句话,

当一切成为习惯后,换到另外一个地方,就真的不习惯了,

开始想家,想老婆,想成都的一切,

还好出差不会太久,再过两天,这边事情搞完了就可以回去了,

时间过的好快,转眼间结婚已经一年了,

以前QQ上有不少扯淡的网友,时不时吹吹牛,扯扯淡,聊聊天,

现在基本上很清静,很清静,

除了工作需要外,就没其它聊天的了,

可能是跟结婚有关的吧,无所谓了,能聊就聊,不聊就闪,

清静也是一件美事,虽然我不喜欢清静!

今天从春秋的QQ好友那里搞了一个捌零音乐的邀请码,

真是无心插柳柳成阴,呵呵。

Posted in 我的生活 at April 26, 2009. by 傻猫 .    Views: 4781    2 Comments

重庆出差中,第一次的美好印象破灭

昨天从出差到重庆,给重庆分公司升级管理系统软件,火车刚到重庆,出站后跟着大队人马走,看见那边有一个出口,跟着路标箭头走,我以为出口处肯定有很多出租车正在等我,结果恰恰相反,没看见一辆出租车,结果是个公交站,我靠,打出租车的地方隐藏的真深啊,给春秋(我同事又是我同学)打电话,原来出租汽车在地下室,我靠,这个直辖市真够牛,出租汽车打车的地方还埋在地下呢,等了半小时才打到车,第一印象就不好。

公司在南岸区石桥铺(就是上次军区枪被抢的地方),晚上住在对面的凯凯宾馆,冲澡真舒服,坐了一下午火车,躲在床上睡着真舒服啊,刚刚睡下一会,就感觉身上有点痒,又有点咬的感觉,难道是有跳蚤?找了半天也没找到,还100/晚,我靠,环境好差啊。睡一晚,今天早上起来痒,身上还起了几个疙瘩,NND,服务好差。

马路在施工,十字路口没有红绿灯,行人横穿马路,车子一个比一个跑得快,如果你眼晴不放精明点,过马路出车祸成功率绝对很高,如果有人想不过,选择在这里自杀肯定是个不错的选择。

来到重庆,离开成都了,这才真正体会到“成都是一座来了就不想离开的城市”的真正含义, 出差重庆,给分公司安装新的系统软件(俺给总公司开发的),但是分公司的领导一个没见着,好像根本没一个人重视一样,一点意思没有,管我鸟事。

不过重庆公司这边有一个好朋友,既是我的同学也是我的同事,有一年多没见了,看到老朋友心理非常高兴,就这些了,今天晚上还要通宵加班弄软件,听说7天连锁酒店还不错,2星级的,有99元的房间,可惜我今天预订的时候已经没了,订了109元的大床房,这个价格是会员价,只要在网上注册成会员就可以享受这个价格,如果去酒店现场订房间的话,要多几十块呢,明天晚上去7天酒店睡,呵呵。

立即注册7天酒店会员

立即注册7天酒店会员

Posted in 我的生活 at April 21, 2009. by 傻猫 .    Views: 4831    1 Comment

SQL存储过程中使用循环操作

使用SQL的Agent可以执行计划任务,把写好的SQL语句放在计划任务里,可以达到奇妙的效果,如定时备份数据,定时执行特定操作等等,当涉及循环操作很多条数据时,这里就要使用游标了,当然SQL中也有循环语句,如使用While。不过while的功能只能实现一般的操作,游标的功能更为强大些,可在一个指定的一个集合内循环操作数据,实现动态操作,那就更牛了,呵呵,以下资料供存档用。

WHILE
设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。

语法
WHILE Boolean_expression
      { sql_statement | statement_block }
      [ BREAK ]
      { sql_statement | statement_block }
      [ CONTINUE ]

参数
Boolean_expression

返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来。

{sql_statement | statement_block}

Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END。

BREAK

导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。

CONTINUE

使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。

注释
如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。

示例

declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end

------------------------------------------------------------

while 条件
begin
执行操作
set @i=@i+1
end

A. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE
在下例中,如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过 $50,然后退出 WHILE 循环并打印一条消息。

USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
     UPDATE titles
        SET price = price * 2
     SELECT MAX(price) FROM titles
     IF (SELECT MAX(price) FROM titles) > $50
        BREAK
     ELSE
        CONTINUE
END
PRINT 'Too much for the market to bear'

B. 在带有游标的过程中使用 WHILE
以下的 WHILE 结构是名为 count_all_rows 过程中的一部分。下例中,该 WHILE 结构测试用于游标的函数 @@FETCH_STATUS 的返回值。因为 @@FETCH_STATUS 可能返回 –2、-1 或 0,所以,所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。成功提取 (0) 后将执行 BEGIN...END 循环内部的 SELECT 语句。

单变量循环
USE pubs
DECLARE tnames_cursor CURSOR
FOR
     SELECT TABLE_NAME
     FROM INFORMATION_SCHEMA.TABLES
OPEN tnames_cursor
DECLARE @tablename sysname
--SET @tablename = 'authors'
FETCH NEXT FROM tnames_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
     IF (@@FETCH_STATUS <> -2)
     BEGIN    
        SELECT @tablename = RTRIM(@tablename)
        EXEC ('SELECT ''' + @tablename + ''' = count(*) FROM '
              + @tablename )
        PRINT ' '
    END
     FETCH NEXT FROM tnames_cursor INTO @tablename
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor

多变量循环

CREATE      PROCEDURE my_FeeCount  AS
declare  @到期时间      char(10)
declare  @片区          char(20)
declare  @缴费用户数 char(10)
declare  @sql  char(2000)

declare  cur_data  cursor  for
 select   convert(varchar(10),到期时间,120)  as 到期时间 ,片区,count(distinct main_id) as  缴费用户数
 from V_aipu_fee where 提交时间>=convert(varchar(10),getdate()-90,120) and 提交时间<convert(varchar(10),getdate()+1-90,120)
 and 收费类型='续费收费'
 Group   by   convert(varchar(10),到期时间,120),片区
 order   by   convert(varchar(10),到期时间,120)
open  cur_data

fetch  next  from  cur_data  into  @到期时间,@片区,@缴费用户数 
while(@@fetch_status  =  0)
begin
        set @sql='update '+RTRIM(@片区)+'实收='+RTRIM(@片区)+'实收+'+RTRIM(@缴费用户数)+' where 收费日期='''+RTRIM(@到期时间)+''''

 print @sql

 fetch  next  from  cur_data  into  @到期时间,@片区,@缴费用户数
end

close  cur_data
deallocate  cur_data

Posted in 数据库 at April 17, 2009. by 傻猫 .    Views: 4534    1 Comment

网赚秘籍:做一个快乐的淘宝客

近几年阿里妈妈异军突起,成功占领网站广告自由交易第一把交椅,由于阿里妈妈与淘宝网系自家兄弟,当阿里妈妈与淘宝网业务接合后就产生了新型职业:淘宝客(原名叫淘客)。淘宝客所做的事就是推广淘宝产品,当交易成功后,赚取商品的佣金。当然淘宝客也有另外一层意思,就是淘宝卖家加入进来,发布自己的产品,让淘宝客来推广,提高自己产品的销量,这些卖家也是淘宝客。

阿里妈妈再掀狂潮,加入淘宝客,马上就赚钱,如果你是网站的话,淘宝客就是非常轻松的赚钱职业,注册淘宝客后,把推广代码添加到网站上,只要你的网站有流量,只要有人访问你的网站,只要有人通过你的链接购买了商品,你就有佣金。当然除了这种效果计费外,还有按展示量计费的,还有按点击量计费的,只有展示,只要有点击,同样可以获得广告收入。

零成本创业,在家也能赚钱!!!    如果没有网站也没关系,可以把推广链接或图片发布到其它论坛也可以,比如论坛签名,也是一个不错的推广方案哦。

除了推广产品外,当你成为淘宝客后,同样可以介绍别人来做淘宝客,有什么好处呢?

1.您只需要将这些广告代码通过博客、论坛、邮件、聊天工具发布,或者直接在您的网站上发布;
2.别人通过广告注册成为淘宝客,您就可以获得该淘宝客接下来个月5%的佣金收入;
3. 被推荐会员如果在7天内赚得1元佣金,您就可以获得额外的5元奖励
4. 被推荐会员加入了淘宝客合作网站,并且产生了收入您就可以再获得额外的5元现金奖励。

还在犹豫什么?赶快加入吧淘宝客吧!

Posted in 我的生活 at April 17, 2009. by 傻猫 .    Views: 3959    1 Comment

Delphi用xls作为数据源,小工具解决大问题

今天接到一个CASE,要求做几个分类汇总,可苦了财务室的魏大侠,以前只是要求对5个片区进行汇总统计,结果今天集团办的领导些要求对各个社区进行汇总统计,六七百个社区啊,全是手动汇总不弄死个人才怪,在了解详细的需求分析后(再一次领会到需求很重要),其实只要一条SQL语句就可以完成,最关键是有些数据要进行人工处理一下后才能方便统计,比如社区名为空的,某些片区不对的,都要手工调整后才能汇总。

于是乎产生一个念头,把系统生成的XLS表格导出后,进行手工处理后,再用工具软件进行分析统计,我需要做的就是做一个分析工具软件,至于手工处理表格,就交给财务室的MM吧,也修改不到多少数据,几分钟就搞定了,关键是分析软件做好,可以节省很多时间,如果全手工的话,恐怕花两天时间整理几百个社区也有点困难哦,关键是全手工处理容易出错,呵呵。

言归正传,看看Delphi如何使用XLS数据源,首先是用ADO连接XLS,其实该SQL连接字符串也可以用于其它语言,连接代码都是一样的。

if OpenDialog1.Execute then
begin
          mydatasrc:=OpenDialog1.FileName;
          try
              con_xls.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+mydatasrc+';Extended Properties=Excel 8.0;Persist Security Info=False';
              con_xls.Connected:=True;
              Application.MessageBox('连接数据源成功!', '提示', MB_OK +
                MB_ICONQUESTION);
          except
              Application.MessageBox('连接数据源失败!', '提示', MB_OK +
                MB_ICONSTOP);
          end; 
end;

将打开的XLS文件作为ADO连接的数据源,连接成功后就可以操作了,excle工作表中第一行会作为字段行,剩下的跟连接SQL SERVER操作一样的。

不过XLS的工作表名要加上$符号,如工作表的名字是fee,那么SQL语句就中表名就应为[fee$],一定要加上[$],不然的话会报SQL语句出错,为了这个中括号,俺找了很多,最后才发现必须加上[],最后附上多字段汇总的SQL,以及汇总统计运算。

procedure TForm1.btn_countClick(Sender: TObject);
var sql:string;
begin
try
    if rb1.Checked then  //按片区汇总
    sql:='select 片区,count(main_id) as 收费户数,sum(缴费金额) as 总金额,sum(缴费周期) as 总周期,sum(优惠天数)'   +' as 总天数,总金额/(总周期+总天数/30) as ARP,(总周期+总天数/30)/收费户数 as 时长 from [fee$] group by 片区'
    else   //按社区名汇总
    sql:='select 社区名,count(main_id) as 收费户数,sum(缴费金额) as 总金额,sum(缴费周期) as 总周期,sum(优惠天数)'  +' as 总天数,总金额/(总周期+总天数/30) as ARP,(总周期+总天数/30)/收费户数 as 时长 from [fee$] group by 社区名';
    qry_fee.Close;
    qry_fee.SQL.Clear;
    qry_fee.SQL.Add(sql);
    qry_fee.Open;
    Sa_myDBGridAutoSize(SamoolGrid1,155,64,70,64,73,130,134,0,0,0);
except
   ShowMessage('ERR');
end;

end;

Posted in 软件开发 at April 16, 2009. by 傻猫 .    Views: 6101    3 Comments

2009の生日快乐!

又是一年生日到,哈哈。

忘记去年那场灾难,今年公司组织3,4月过生的同事一起在塔子山野炊,本来原计划是塔子山烧烤的,结果后来改为在茶楼野炊了,说是野炊不过就是把买好的熟食拿出来吃摆了,总共人数大概有50多人吧,还是不错,难得一起吃东西,一起玩了,今天塔子山在举行花展,其实也没多少花,还5元门票呢,划不着。

说说最近几件新鲜事吧,老鬼和V的博客已经半死不活了,哈哈,终于又耗死两个博客。

博客右边侧栏放上了广告位,125X125的,当然下面赞助商也可以放广告位,250x250的,欢迎中小企业长期投放广告,为啥不欢迎大企业投放广告呢,因为压根大企业就看不俺博客,还是有自知之明的,哈哈。

另外右边侧栏还放上了淘宝手机充值的链接,还有一个淘宝淘客网购的链接,方便自己的同时,也方便别人,手机充值,快速到帐,值得推荐一下。

后记:这篇日志是昨天晚上5:30写的,正当我要发布的时候,网络断了,拨号成功后不能获取数据,草他中国电信奶奶的,10000号打N久才打通,上不了网发泄一下怨气,狗日的电信话务员还顶撞我,说故障要24小时内才能恢复,我说你们怎么不定个一个月才恢复,那个话务员MM居然说如果公司定一个月,我就告诉你一个月,如果公司定24小时,我就告诉你24小时,那个猪头这样顶撞客户,我投诉了0

没有不对的客户,只有不好服务。

Posted in 我的生活 at April 16, 2009. by 傻猫 .    Views: 5819    4 Comments

SQL日期和时间函数

1.一个月第一天的
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

2.本周的星期一
Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

3.一年的第一天
Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

4.季度的第一天
Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

5.当天的半夜
Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

6.上个月的最后一天
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

7.去年的最后一天
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

8.本月的最后一天
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

9.本年的最后一天
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

10.本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

返回当前日期和时间
通过函数GETDATE(),你可以获得当前的日期和时间。函数GETDATE()可以用来作为DATEDIME型字段的缺省值。这对插入记录时保存当时的时间是有用的。要建立一个表,其中的记录包含有当前的日期和时间,可以添加一个DATETIME型字段,指定其缺省值为函数GETDATE()的返回值,就象这样:

Create TABLE site_log (
username VARCHAR(40),
useractivity VARCHAR(100),
entrydate DATETIME DEFAULT GETDATE())

转换日期和时间
函数GETDATE()的返回值在显示时只显示到秒。实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒)。
要得到不同格式的日期和时间,你需要使用函数CONVERT()。例如,当下面的这个语句执行时,显示的时间将包括毫秒:

Select CONVERT(VARCHAR(30),GETDATE(),9)

注意例子中数字9的使用。这个数字指明了在显示日期和时间时使用哪种日期和时间格式。当这个语句执行时,将显示如下的日期和时间:
Nov 30 1997 3:29:55:170AM
(1 row(s) affected)

在函数CONVERT()中你可以使用许多种不同风格的日期和时间格式。下表显示了所有的格式。

日期和时间的类型:
类型值 标准 输出
0 Default mon dd yyyy hh:miAM
1 USA mm/dd/yy
2 ANSI yy.mm.dd
3 British/French dd/mm/yy
4 German dd.mm.yy
5 Italian dd-mm-yy
6 - dd mon yy
7 - mon dd,yy
8 - hh:mi:ss
9 Default + milliseconds--mon dd yyyy
hh:mi:ss:mmmAM(or )
10 USA mm-dd-yy
11 JAPAN yy/mm/dd
12 ISO yymmdd
13 Europe Default + milliseconds--dd mon yyyy
hh:mi:ss:mmm(24h)
14 - hh:mi:ss:mmm(24h)

类型0,9,和13总是返回四位的年。对其它类型,要显示世纪,把style值加上100。类型13和14返回24小时时钟的时间。类型0,7,和13返回的月份用三位字符表示(用Nov代表November).

对表中所列的每一种格式,你可以把类型值加上100来显示有世纪的年(例如,00年将显示为2000年)。例如,要按日本标准显示日期,包括世纪,你应使用如下的语句:

Select CONVERT(VARCHAR(30),GETDATE(),111)

在这个例子中,函数CONVERT()把日期格式进行转换,显示为1997/11/30

抽取日期和时间
在许多情况下,你也许只想得到日期和时间的一部分,而不是完整的日期和时间。为了抽取日期的特定部分,你可以使用函数DATEPART(),象这样:

Select site_name ‘Site Name’,
DATEPART(mm,site_entrydate) ‘Month Posted’ FROM site_directory

函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个变量是实际的数据。在这个例子中,函数DATEPART()抽取月份,因为mm代表月份。下面是这个Select 语句的输出结果:

Site Name Month Posted
………………………………………………………………
Yahoo 2
Microsoft 5
Magicw3 5
(3 row(s) affected)

Month Posted列显示了每个站点被查询的月份。函数DATEPART()的返回值是一个整数。你可以用这个函数抽取日期的各个不同部分,如下表所示。

日期的各部分及其简写
日期部分 简写 值
year yy 1753--9999
quarter qq 1--4
month mm 1--12
day of year dy 1--366
day dd 1--31
week wk 1--53
weekday dw 1--7(Sunday--Saturday)
hour hh 0--23
minute mi 0--59
second ss 0--59
milisecond ms 0--999

当你需要进行日期和时间的比较时,使用函数DATEPART()返回整数是有用的。但是,上例中的查询结果(2,5)不是十分易读。要以更易读的格式得到部分的日期和时间,你可以使用函数DATENAME(),如下例所示:

Select site_name ‘Site Name’
DATENAME(mm,site_entrydate) ‘Month Posted’
FROM site_directory

函数DATENAME()和函数DATEPART()接收同样的参数。但是,它的返回值是一个字符串,而不是一个整数。下面是上例该用DATENAME()得到的结果:

Site Name Month Postec
………………………………………………………………….
Yahoo February
Microsoft June
Magicw3 June
(3 row(s) affected)

你也可以用函数DATENAE()来抽取一个星期中的某一天。下面的这个例子同时抽取一周中的某一天和日期中的月份:

Select site_name ‘Site Name’,
DATENAME(dw,site_entrydate)+ ‘-’ + DATENAME(mm,site_entrydate)
‘Day and Month Posted’ FORM site_directory

这个例子执行时,将返回如下的结果:

Site Name Day and Month Posted
………………………………………………………………………
Yahoo Friday - February
Microsoft Tuesday - June
Magicw3 Monday - June
(3 row(s) affected)

返回日期和时间范围
当你分析表中的数据时,你也许希望取出某个特定时间的数据。你也许对特定的某一天中――比如说2000年12月25日――访问者在你站点上的活动感兴趣。要取出这种类型的数据,你也许会试图使用这样的Select语句:

Select * FROM weblog Where entrydate="12/25/20000"

不要这样做。这个Select语句不会返回正确的记录――它将只返回日期和时间是12/25/2000 12:00:00:000AM的记录。换句话说,只有刚好在午夜零点输入的记录才被返回。

问题是SQL Sever将用完整的日期和时间代替部分日期和时间。例如,当你输入一个日期,但不输入时间时,SQL Sever将加上缺省的时间“12:00:00:000AM”。当你输入一个时间,但不输入日期时,SQL Sever将加上缺省的日期“Jan 1 1900”。
要返回正确的记录,你需要适用日期和时间范围。有不止一种途径可以做到这一点。例如,下面的这个Select 语句将能返回正确的记录:

Select * FROM weblog
Where entrydate>=”12/25/2000” AND entrydate<”12/26/2000”

这个语句可以完成任务,因为它选取的是表中的日期和时间大于等于12/25/2000 12:00:00:000AM并小于12/26/2000 12:00:00:000AM的记录。换句话说,它将正确地返回2000年圣诞节这一天输入的每一条记录。
另一种方法是,你可以使用LIKE来返回正确的记录。通过在日期表达式中包含通配符“%”,你可以匹配一个特定日期的所有时间。这里有一个例子:

Select * FROM weblog Where entrydate LIKE ‘Dec 25 2000%’

这个语句可以匹配正确的记录。因为通配符“%”代表了任何时间。
使用这两种匹配日期和时间范围的函数,你可以选择某个月,某一天,某一年,某个小时,某一分钟,某一秒,甚至某一毫秒内输入的记录。但是,如果你使用LIKE 来匹配秒或毫秒,你首先需要使用函数CONVERT()把日期和时间转换为更精确的格式(参见前面“转换日期和时间”一节)。

比较日期和时间
最后,还有两个日期和时间函数对根据日期和时间取出记录是有用的。使用函数DATEADD()和DATEDIFF(),你可以比较日期的早晚。例如,下面的Select语句将显示表中的每一条记录已经输入了多少个小时:

Select entrydate ‘Time Entered’
DATEDIFF(hh,entrydate,GETDATE()) ‘Hours Ago’ FROM weblog

如果当前时间是2000年11月30号下午6点15分,则会返回如下的结果:

Time Entered Hours Ago
…………………………………………………..
Dec 30 2000 4:09PM 2
Dec 30 2000 4:13PM 2
Dec 1 2000 4:09PM 698
(3 row(s) affected)

函数DADEDIFF()的参数是三个变量。第个变量指定日期的某一部分。在这个例子中,是按小时对日期进行比较,(要了解日期各部分的详细内容,请参考表11.2)在日期2000年11月1日和2000年11月30日的指定时间之间有689个小时。另外两个参数是要进行比较的时间。为了返回一个正数,较早的时间应该先给。
函数DATEADD()把两个日期相加。当你需要计算截止日期这一类的数据时,这个函数是有用处的。假如你要查询一个月前注册用户的记录,你可以使用如下的Select语句:

Select username ‘User Name’,
DATEADD(mm,1,firstvisit_date) ‘Registration Expires’
FROM registration_table

函数DATEADD()的参数有三个变量。第一个变量代表日期的某一部分,这个例子用到了代表月份的mm。第二个变量指定了时间的间隔――在本例中是一个月。最后一个变量是一个日期,在这个例子中,日期是取自DATETIME型字段firstvisit_date.假设当前日期是June 30,2000,这个语句将返回如下的内容:

User Name Registration Expires
……………………………………………………………………………
Bill Gates Jul 30 2000 4:09PM
President Clinton Jul 30 2000 4:13PM
William Shakespeare Jul 1 2000 4:09PM
(3 row(s) affected)

注意:
使用函数DATEADD()把一个日期加上一个月,它并不加上30天。这个函数只简单地把月份值加1。 

函数 参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值 DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称


参数 interval的设定值如下:

缩 写(Sql Server) Access 和 ASP 说明 Year Yy yyyy 年 1753 ~ 9999 Quarter Qq q  季 1 ~ 4 Month Mm m  月1 ~ 12 Day of year Dy y 一年的日数,一年中的第几日 1-366 Day Dd d  日,1-31 Weekday Dw w 一周的日数,一周中的第几日 1-7 Week Wk ww 周,一年中的第几周 0 ~ 51 Hour Hh h  时0 ~ 23 Minute Mi n  分钟0 ~ 59 Second Ss s 秒 0 ~ 59 Millisecond Ms - 毫秒 0 ~ 999
Posted in 数据库 at April 13, 2009. by 傻猫 .    Views: 6389    1 Comment