select * from tablename where sdate='2001-07-01'

解决方案 »

  1.   

    若你的数据库里的时间表示还带有时分秒,那就用下面方法:
    select * from tablename where year(sdate)='2001' and month(sdate)='07'
      

  2.   

    不要意思,sdate已经是DATE型,例如是2001-07-01,但我的本意是要把表中7月份的记录给挑出来,即想把sdate转换成字符串,其长度为7,再和‘2001-07’
      

  3.   

    不要意思,sdate已经是DATE型,例如是2001-07-01,但我的本意是要把表中7月份的记录给挑出来,即想把sdate转换成字符串,其长度为7,再和‘2001-07’比较,(其中2001-07是不分开的,因为是个变量,而现在我只是举个例子而已),谢谢!!
      

  4.   

    skimwater(掠水惊鸿) ,同胞要记住回复我啊,不然,死定了,谢谢!!
      

  5.   

    convert(varchar(7),sdate,20)='2001-07'
                             ^^注意这里   
      

  6.   

    convert(varchar(7),sdate,120)='2001-07'
      

  7.   

    20或120是ODBC规范标准(yyyy-mm-dd hh:mm:ss[.fff])
    11是日本标准(yy/mm/dd)
      

  8.   

    “其中2001-07是不分开的,因为是个变量”
    用copy函数不就可以把这个变量分开变成两个了吗?如s:='2001-07';s1:=copy(s,1,4);s2:=copy(s,6,2);这样s1:='2001',s2:='07'了,这样用
    skimwater(掠水惊鸿) 说的方法就能实现你的要求了,具体在Delphi中的SQL的使用可以如下:
    ADOQuery1.SQL.Add('select * from orders where year(or_mdate)='+''''+'2001'+''''+' and month(or_mdate)='+''''+'07'+'''')若是传变量则:ADOQuery1.SQL.Add('select * from orders where year(or_mdate)='+''''+s1+''''+' and month(or_mdate)='+''''+s2+'''')
      

  9.   

    谢谢各位,还是不行的,具体如下:
    (2001-07-04 16:46:49)   lcaamtbfrq:=formatdatetime('yyyy'+'-'+'mm',datetimepicker1.date);
    with fpiao do
      begin
      close;
      sql.clear;
      sql.add('select count(*) from fpxz');
      sql.Add ('where fplx='+''''+sfapiao+'''');
      sql.Add ('and fenju='+''''+xzfj.Text +'''');
      sql.add('and convert(varchar(7),sdate,20)='+''''+frq+'''');
      open;                                 或为120
    都不行,
    其中sfapiao是个变量,sdate是字段名称;
    出错语句是:invalid use of keyword。token varchar(7),sdate,11)='2001-07'
    各位有没有OICQ,在OICQ上请教也许更方便一点,谢谢!!
      

  10.   

    用我的方法绝对行,不行,我加分给你!你将frq变为两个变量,在按我说的方法做,去试试吧!
      

  11.   

    convert是SQL中的一个函数,在Delphi不能这样使用!
      

  12.   

    Sorry,在Delphi中convert试过也行,但sql的执行是这样的;
     close;
     sql.clear;
     sql.add();
     .ExecSQL;(这句必须要)
     sql.open;
      

  13.   

    select * from tablename 
            where subs(convert(char(8),sdate,112),1,7)='2001-07'
      

  14.   

    year(or_mdate)是数值型,怎能和字符型相等呢
      

  15.   

    sorry,应该是
    select * from tablename 
            where subs(convert(char(20),sdate,120),1,7)='2001-07'
      

  16.   

    这个总可以了吧
    select * from TABLENAME WHERE SUBSTRING(CONVERT(CHAR(20),RQ,120),1,7)='2001-07'
      

  17.   

    用Query好像是有点问题,用ADOQuery则可以,我再试试!
      

  18.   

     回复人:Apollo47(阿波罗) (2001-7-4 16:00:45)  得0分 
    不必转换,查找日期在2001-7-1到2001-7-31之间的记录不就得了. 
      

  19.   

    agree xlzps的作法:
     ExecSQL;(*******这句必须要***********)
     而且用取子串函数COPY等肯定可以的。
     我觉得实现的方法很多!
      

  20.   

    xlzps,你好,你说的close;
                     sql.clear;
                     sql.add();
                     execsql;
                     sql.open;
    这样可以吗?为什么要用execsql语句,而且SQL好象没有open的属性。
    另外convert(char(8),sdate,11),是用11还是20呀!
      

  21.   

    Sorry,不是sql.open,而是Query1.open;execsql是执行查询语句!至于convert的用法,你看SQL的帮助就知道,它带的参数的意思!看如下,你就知道11的意思了:
    1 101 USA mm/dd/yy 
    2 102 ANSI yy.mm.dd 
    3 103 British/French dd/mm/yy 
    4 104 German dd.mm.yy 
    5 105 Italian dd-mm-yy 
    6 106 - dd mon yy 
    7 107 - Mon dd, yy 
    8 108 - hh:mm:ss 
    - 9 or 109 (*)  Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM (or PM) 
    10 110 USA mm-dd-yy 
    11 111 JAPAN yy/mm/dd 
    12 112 ISO yymmdd 
    - 13 or 113 (*)  Europe default + milliseconds dd mon yyyy hh:mm:ss:mmm(24h) 
    14 114 - hh:mi:ss:mmm(24h) 
    - 20 or 120 (*)  ODBC canonical yyyy-mm-dd hh:mi:ss(24h) 
    - 21 or 121 (*)  ODBC canonical (with milliseconds) yyyy-mm-dd hh:mi:ss.mmm(24h) 
    - 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(no spaces) 
    - 130* Kuwaiti dd mon yyyy hh:mi:ss:mmmAM 
    - 131* Kuwaiti dd/mm/yy hh:mi:ss:mmmAM 我等下再来,现在要踢球去了!呵呵,先走开一会!
      

  22.   

    各位同胞:好象用QUERY不行的,至于用ADOquery怎样我就不知道了
      

  23.   

    谢谢各位同胞,你们讲的在SQL中都可以用,但是在DELPHI的QUERY控件的SQL中运行都是出错的,没办法了,还有请问一下ADOquery在哪里,我想试一下
      

  24.   

    对呀,我一直在试,也不行,ADOquery在ADO一栏中!
      

  25.   

    ADOquery可以吗?它的用法是不是和QUERY差不多
      

  26.   

    xlzps,你好,可不可以OICQ或者EMAIL给我,可以经常向你请教,谢谢!!
    不好意思,我没有看到ADO控件页
      

  27.   

    [email protected],我的QQ是:20214253。我用Delphi也没有多久,也很菜,谈不上请教,大家互相帮忙吧!ADO就在DataControl旁边呀(不会你没有把它加进来吧)。其实给Query传日期字段值,比较好的方法就是给它传参数,这样就不会出现上述问题了,传日期参数值给它一点问题都没有!delphi5的BDE和ADO都还有些Bug,要打些补丁程序!
      

  28.   

    其实这确实有许多种解决办法,下面又是一种:
      Query2.Close;
      Query2.SQL.Clear;
      Query2.SQl.Add('select * from clients where date_open>="10/1/1990/" and      date_open<"11/1/1990"');
      Query2.ExecSQL;
      Query2.Open;(这样就取出了1990-10的数据,mm-dd-yyyy是Delphi自带数据库中存日期的格式)
      

  29.   

    这样的功能根本就应该发到后台去执行,给Delphi返回一个结果就是了,convert的第三个参数在Book-online上有,写的很清楚。
      

  30.   

     with query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from MonthPlan');
        SQL.Add('where CONVERT(char(6), CONVERT(char(4), DATEPART(year, Date))+CONVERT(char(2), DATEPART(month, Date)))=:Date');
        ParamByName('Date').AsString:='20017';
        Prepare;
        Open;
      end;
      

  31.   

    上面的回答都有不完善的地方:在前台用Queyr也是可以的,标准答案如下(已通过检验):
     with query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from MonthPlan');
        SQL.Add('where CONVERT(char(6), CONVERT(char(4), DATEPART(year, Date))+CONVERT(char(2), DATEPART(month, Date)))=:Date');
        ParamByName('Date').AsString:='20017';
        Prepare;
        Open;
      end;
    实际应用中只要将'20017'改为变量即可;
    在后台可用存储过程或视图也可以实现这个功能,方法就是将日期型的字段取出它的年和月
    即可:
    CONVERT(char(6), CONVERT(char(4), DATEPART(year, Date))+CONVERT(char(2), DATEPART(month, Date)))
    以上我已在实际应用中使用,我是用来查询月生产计划的
      

  32.   

    上面的回答都有不完善的地方:在前台用Queyr也是可以的,标准答案如下(已通过检验):
    with query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from MonthPlan');
        SQL.Add('where CONVERT(char(6), CONVERT(char(4), DATEPART(year, Date))+CONVERT(char(2), DATEPART(month, Date)))=:Date');
        ParamByName('Date').AsString:='20017';
        Prepare;
        Open;
      end;
    实际应用中只要将'20017'改为变量即可;
    在后台可用存储过程或视图也可以实现这个功能,方法就是将日期型的字段取出它的年和月
    即可:
    CONVERT(char(6), CONVERT(char(4), DATEPART(year, Date))+CONVERT(char(2), DATEPART(month, Date))) as 计划月份
    以上我已在实际应用中使用,我是用来查询月生产计划的