上两贴忘记了告诉大家是在access数据库中应用。
问题:
1,将数据库中rq列的值修改为rq所在周的周一的日期。例如:2002-11-24是周四,则把它修改为2002-11-21。
2,将数据库中rq列的值修改为rq所在月的第一天的日期。例如:2002-11-24,则把它修改为2002-11-1。
3,将数据库中rq列的值修改为rq所在年的第一天的日期。例如:2002-11-24,则把它修改为2002-1-1。
开发环境为delphi+ado+access,这些问题要用sql语句来解决,因为数据有3000多条,用adotable会很慢。另附:我自己的想法:
delphi中有一个dayofweek()函数,我想这样做:
update table1 set rq=rq-dayofweek(rq)
但是这个语句delphi不认,:(  明天要交工了,着急上火中
希望大家多费心帮忙。

解决方案 »

  1.   

    with Query do
    begin
      Close;
      Sql.Text := 'update table1 set rq=rq-'+IntToStr(dayofweek(rq));
      ExecSQL;
    end;
      

  2.   


    真受不了你!!给了你一条那么有效率的SQL Server语句尽然不会用!!
    (可能这句话过分了些,但都说了)你只要添加一个TQuery
    然后写入那条语句,再ExecSQL!!
    它的效率比你的要好个N多倍!!!!
      

  3.   

    CoolSlob() :
    呵呵,昨天晚上我试过了,但是提示dd,dw没有定义,没办法只好自己想办法。
    :(
    请多指点了。
      

  4.   

    如果你使用的是SQL Server的话,不可能说没有定义的!你把语句写到Query中去!然后ExecSQL
      

  5.   

    genphone_ru(票票) ( ) :
    错误信息:rq没有定义.
      

  6.   

    DATEPART
    Returns an integer representing the specified datepart of the specified date.Syntax
    DATEPART ( datepart , date ) Arguments
    datepartIs the parameter that specifies the part of the date to return. The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.Datepart Abbreviations 
    year yy, yyyy 
    quarter qq, q 
    month mm, m 
    dayofyear dy, y 
    day dd, d 
    week wk, ww 
    weekday dw 
    hour hh 
    minute mi, n 
    second ss, s 
    millisecond ms 
      

  7.   

    CoolSlob() ( ) :
    昨天我忘记说了,我用的是access数据库,所以今天又从新发贴了。
      

  8.   

    CoolSlob() ( ) 

    我不是故意的阿。而且是因为搞不懂才问阿。
    把update table1 set rq=rq-'+IntToStr(dayofweek(RQ));
    加到adoquery中,错误信息是:undeclared identifier'rq'
    :(
      

  9.   

    应该是是dayofweek(RQ)里面的这个rq吧,咋办阿?已经没有时间再自己研究了,快帮帮我阿。
      

  10.   

    CoolSlob() ( ):
    对不起,别生气阿,还等着你帮我呢。
      

  11.   


    'update table1 set rq = rq - DATEPART(dw, rq)'试试看
      

  12.   

    没人帮我了?我想搞明白一个问题
    就是delphi函数和sql语句结合的问题。
    delphi中有一个dayofweek()函数
    'update table1 set rq=rq-'+IntToStr(dayofweek(rq));
    单引号里面的内容没问题,可是后面的IntToStr(dayofweek(rq));中的rq是表里面的一个列名,可以直接这样引用么?
    期待中
      

  13.   

    'update table1 set rq = rq - datepart(dw, rq)'
      

  14.   

    hhaibin(小海) ( ) :
    我用的是access数据库,datepart(dw, rq)
    这样恐怕不行。
      

  15.   

    我知道,datepart是SQL语言的函数,你先试试
      

  16.   

    那看来只能使用土办法了
    先把日期取出来然后再用dayofweek函数算出星期几来
    最后再Update回去
      

  17.   

    找找access的函数吧
    officeXP中的帮助比较全
    或msdn
      

  18.   

    呵呵,CoolSlob() ,你怎么象程咬金,人家早就说是access1,将数据库中rq列的值修改为rq所在周的周一的日期。例如:2002-11-24是周四,则把它修改为2002-11-21。这个还真不好写,dateadd("d",-datepart("w",rq),rq)
    2,将数据库中rq列的值修改为rq所在月的第一天的日期。例如:2002-11-24,则把它修改为2002-11-1。format(rq,'yyyy-mm-01')3,将数据库中rq列的值修改为rq所在年的第一天的日期。例如:2002-11-24,则把它修改为2002-1-1。format(rq,'yyyy-01-01')测试通过,别说有问题!