模糊查询日期的问题(100分)

  • 主题发起人 主题发起人 wutenghua
  • 开始时间 开始时间
W

wutenghua

Unregistered / Unconfirmed
GUEST, unregistred user!
我是新手 请教
access数据库我想用sql查找日期为指定年份
月份等条件的记录。也就时说用户有时只输入
年份,有时他又输入年月,有时他又输入完整
例如:
ELECT * From 表 WHERE Format(日期, 'yyyy-mm-dd')='2002'
或ELECT * From 表 WHERE Format(日期, 'yyyy-mm-dd')='2002-01'
要等于不要like
 
最好用datetimepicker,或输入年月日
用year,month,day
year(日期)=:year;
month(日期);=
 
select * from tab1 where dt>=#2000-1-1# and dt<=2000-12-31
 
如果一定要這樣做的話﹗你首先定義一個標志.(bz)
然后根據用戶輸入的數據的長短來確定用戶輸入的是什么樣的數據
如果為四位數的數據 then bz='y'
如果為7位的數據 then bz='ym'
如果為10位的 then bz='ymd'
else
不合理的數據
再根據標志寫相應的處理語句﹗

以上為本人之愚見.

 
to taxtax
能不能清楚一点。

to hgood
感谢你明白我的意思了。有没有再简单一点的?
 
有時問的多不如馬上動手實踐﹗哈哈﹗﹗﹗不要閑麻煩!我沒想到更簡單的﹗﹗
 
我觉得你应该在你的程序中做一些处理,例如:只输入2000,在你的程序中
应该给它补上-01-01,然后将其转换为日期型后再带入查询
若输入200001,则给它插入一个-,然后再补上-01,然后将其转换为日期型后再带入查询
如果想查找2000年全年的数据,用户只输入2000,你则应该将其处理为
2000-01-01、2000-12-31两个日期,然后再带入查询中去,这样处理我觉得好象更好一些
只是需要的代码多了一些
 
你是用edit作为输入的吧!
在开始查询之前用int1:=length(trim(edit.text))判断一下输入的是年,月,还是日;
int1:integer;
strSql:string;
if int1=4 then
strSQl:='查询年'
if 4=<int1<=6 then
strsql:='查询月'
if 6<int1<=8 then
strsql:='查询日期'
 
nothingknown,
你的办法还应加上一些合法性的检查,最好是用一个字符串转到日期格式的函数判断一下
try
strToDateTime('you date string');
ex
showmessage('date error');
end;
这样才能判断出输入的是否合法,仅仅用判断字符串长度就认定它是年,月,日会有潜在
的不安全性
 
我认为不可能有时这样输入,
有时又那样输入,这不是一个好的和规范的使用方法,
软件的使用必须规范,
如果不规范,再好的软件也不如手工来的方便。
同时,利用datetimepicker组件可以实现一般对日期输入的要求,
如果实在特别。
要分析特别的原因和地方,
然后以不同的方式进行处理!


 
根据条件判断,在用户的年月后自己加DAY,然后between ...and ...
 
接受答案了.
 

Similar threads

D
回复
0
查看
911
DelphiTeacher的专栏
D
D
回复
0
查看
868
DelphiTeacher的专栏
D
D
回复
0
查看
840
DelphiTeacher的专栏
D
后退
顶部