请参考此句,调试可用 其中ship_date为date型 INTERBASE select ship_date,cast(ship_date as char(10)) from sales where cast(ship_date as char(10)) like '%MAY%'
var yy,mm,dd :word; StartDate,EndDate,Date :TDateTime; Date:=StrToDate('2001-5-15'); DecodeDate(Date,yy,mm,dd); StartDate:=EncodeDate(yy,mm,1); // 2001-5-1; EndtDate:=EncodeDate(yy,mm,MonthDays[IsLeapYear(yy), mm]);// 2001-5-31; Select * from TableName Where date between StartDate and EndDate
楼上几位大侠的方法我去试试。 补充一点,我要查询的是历年的数据。用 between 解决不了。
我觉得最好是做个UDF---Month, Year, 然后 select * from anytable where (month(datefield) = 5) and (year(datefield) = 2001);
//Local SQL: Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select * From 表 where Extract(MONTH From DateField)=5 '); Query1.Prepare; Query1.Open; //DateField为日期字段 各位在答写SQL语句时,请先说明是本地SQL、还是后台存储过程,因有些函数本地SQL 是不支持的!
select ship_date,cast(ship_date as char(10)) from sales where cast(ship_date as char(10)) like '%MAY%'
StartDate,EndDate,Date :TDateTime;
Date:=StrToDate('2001-5-15');
DecodeDate(Date,yy,mm,dd);
StartDate:=EncodeDate(yy,mm,1); // 2001-5-1;
EndtDate:=EncodeDate(yy,mm,MonthDays[IsLeapYear(yy), mm]);// 2001-5-31;
Select * from TableName Where date between StartDate and EndDate
补充一点,我要查询的是历年的数据。用 between 解决不了。
然后
select * from anytable where (month(datefield) = 5) and (year(datefield) = 2001);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From 表 where Extract(MONTH From DateField)=5 ');
Query1.Prepare;
Query1.Open;
//DateField为日期字段
各位在答写SQL语句时,请先说明是本地SQL、还是后台存储过程,因有些函数本地SQL
是不支持的!
在 Ib 6.01 中通过,5.X不行。
能否不用存储过程解决此问题。
用 cast 可以解决问题,但比较麻烦,需手工将月份数字转换为英文。(powerlee 提供)
用 Extract 也可以解决问题,但只能在 6.01 中使用。(lhbzq 提供)
历年即为1995 1996 1997 1998 1999 2000 2001 2002 ...