select * from tablename where sdate='2001-07-01'
解决方案 »
- 根据数据库提供路径显示本地的多幅图片问题
- 显示时间类型的控件
- 有没有人有将ACCESS查询打印到FastReport分栏的报表
- 求教:下面语句对吗???
- 如何把格式文本(有上下标的),比如化学符号,导入到WORD文件中,格式不能变,200分,up有分,在线等
- 数据查询问题
- 如何实现对IIS的控制?
- 我刚刚看李伟的分布式多层系统,第一个例子遇到问题,我在98下作了应用服务器的程序,又做了客户端.............
- 救命啦 frame 如何同时显示 多个国家文字呀
- 考出了高程,到底有没有用?请大家随便谈谈,不要客气!
- BitBlt是hdc的画图命令,它的写字命令是什么?
- 急问,如何实现dialog的execute?
select * from tablename where year(sdate)='2001' and month(sdate)='07'
^^注意这里
11是日本标准(yy/mm/dd)
用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+'''')
(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上请教也许更方便一点,谢谢!!
close;
sql.clear;
sql.add();
.ExecSQL;(这句必须要)
sql.open;
where subs(convert(char(8),sdate,112),1,7)='2001-07'
select * from tablename
where subs(convert(char(20),sdate,120),1,7)='2001-07'
select * from TABLENAME WHERE SUBSTRING(CONVERT(CHAR(20),RQ,120),1,7)='2001-07'
不必转换,查找日期在2001-7-1到2001-7-31之间的记录不就得了.
ExecSQL;(*******这句必须要***********)
而且用取子串函数COPY等肯定可以的。
我觉得实现的方法很多!
sql.clear;
sql.add();
execsql;
sql.open;
这样可以吗?为什么要用execsql语句,而且SQL好象没有open的属性。
另外convert(char(8),sdate,11),是用11还是20呀!
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 我等下再来,现在要踢球去了!呵呵,先走开一会!
不好意思,我没有看到ADO控件页
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自带数据库中存日期的格式)
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;
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)))
以上我已在实际应用中使用,我是用来查询月生产计划的
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 计划月份
以上我已在实际应用中使用,我是用来查询月生产计划的