在DELPHI中日期查询的SQL语句该怎样写?

hmz998 2003-08-22 06:49:56
我在Edit输入日期格式的字符串'2003-8-21‘然后用以下代码查询数据库中的数据,为何查询不到?
With DM.AQ_Rk DO
Begin
sql.clear
sql.add('Select * from Detail_rk where Rkssj='''+edit1.text+'''');
DM.AQ_Rk.open;
end;
是不是日期格式问题,我的开发环境为‘D6+SQL SERVER 2000'
...全文
392 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xieruinan1 2003-09-22
  • 打赏
  • 举报
回复
用convert()函数,要知道你数据库中的日期格式
用CONVERT 函数的style 选项能以不同的格式显示日期和时间style 是将
DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供
的转换样式编号不同的样式编号有不同的输出格式如表4-8 所示
表4-8 DATATIME 和SMALLDATETIME 类型数据的转换格式
style1 style2 标准输出格式
0 或100 缺省mon dd yyyy hh:mi Am/Pm
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 UK/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:mi:ss
9 109 mon dd yyyy
hh:mi:sss Am/Pm
10 110 USA mm=dd-yy
11 111 Japan yy/mm/dd
12 112 ISO yymmdd
13 113 Europe dd mon yyyy
hh:mi:ss:mmm 24h
14 114 hh:mi:ss:mmm 24h
20 120 ODBC1 yyyy-mm-dd
hh:mi:ss 24h
21 121 ODBC2 yyyy-mm-dd
hh:mi:ss:mmm 24h
例4-66
select getdate(), convert(char(12), getdate(), 1), convert(char (24), getdate(),100), convert(char(12), getdate() ,112)
运行结果如下
--------------------------- ------------ ------------------------ ------------
2000-06-15 23:49:35.273 06/15/00 Jan 15 2000 11:49PM 20000615
Lordy 2003-09-22
  • 打赏
  • 举报
回复
sql.add('Select * from Detail_rk where Rkssj=#'+edit1.text+'# ');
或者
sql.add('Select * from Detail_rk where Rkssj='''+edit1.text+'''');
或者用access的话
sql.add('Select * from Detail_rk where Rkssj=cdate('+edit1.text+')');
或者用mssql的话
sql.add('Select * from Detail_rk where Rkssj=cast('+edit1.text+' as datetime) ');
应该都可以的。

zhaolinyong 2003-09-22
  • 打赏
  • 举报
回复
将中间那句改为
sql.add('Select * from Detail_rk where Rkssj='#'+edit1.text+'#'');
因为在dephi里面表示时间的字段前后都必须加上“#”,只有这样才能表示时间。不加的话,表示的就是字符串了!嘿嘿!
johnnyqiu 2003-09-22
  • 打赏
  • 举报
回复
把时间格式改改
试下
mm-dd-yyyy
ManagerMan 2003-09-22
  • 打赏
  • 举报
回复
只要使用以下的语句格式就可以了
select * From table1 where Date='1905-05-27'
suise 2003-09-22
  • 打赏
  • 举报
回复
可以用maskedit,先将它的掩码设为时间形式,在EDITMASK属性中,然后直接查询啊!我们的一个大工程中查询时间都是这么做的啊!
With DM.AQ_Rk DO
Begin
sql.clear
sql.add('Select * from Detail_rk where Rkssj='''+maskedit1.text+'''');
DM.AQ_Rk.open;
end;
zhksoft 2003-09-21
  • 打赏
  • 举报
回复
改一下WINDOWS的系统日期格式
yuxiangyu 2003-08-24
  • 打赏
  • 举报
回复
平什么说上面的方法都有问题?
这样吧,你不要用edit控件了。换一个delphi的日期控件试一试,或者dxdateedit如果不出现问题
,证明是字符串的格式问题。用一下formatter函数在世一下,程序马都是慢慢调出来的。
ASPCOMjsp 2003-08-23
  • 打赏
  • 举报
回复
看看数据库里存的是不是'2003-8-20 00:00:00',
'2003-8-20 12:20:00'是不会等于'2003-8-20'的
paliang 2003-08-23
  • 打赏
  • 举报
回复
小菜鸟来现丑了,如果搞不定,我到贴8000分,我还有8000分:)
上面的方法都有问题,因为SQL 中的datetime是‘yyyy-mm-dd hh:mm:ss.fff'的
如果查询的时候Rkssj='yyyy-mm-dd'是查不到东西的,
所以要用convert转换一下,正确方法是
sql.add('Select * from Detail_rk where convert(char(10),Rkssj,20)='''+TRIM(edit1.text)+'''');

这里,20可以改成126也行,你可以去看看帮助,
问题解决了,

那个dateDiff很麻烦,不过有麻烦的问题还是要用它
checkyvc6 2003-08-23
  • 打赏
  • 举报
回复
和数据库类型相关
access
'dfasfas','2003-8-20'表示字符串
#2003-8-20#表示时间。

jmjunta 2003-08-23
  • 打赏
  • 举报
回复
用格式化函数把在Edit中输入的日期格式的字符串'2003-8-21转化为'2003-08-21' 或'2003.08.21'后再试. 你的数据库中的日期格式可能是yyyy.mm.dd或yyyy-mm-dd,
而你传过去的值却是'2003-8-21',故找不到相关的记录.用事件探查器跟一下就晓得结果了.
wujunwei 2003-08-23
  • 打赏
  • 举报
回复
var
date3_1,date3_2 :string;
begin
date3_1:=datetostr(datetimepicker2.Date);
dm_1.aq_workshop3_chart.close;
dm_1.aq_workshop3_chart.Filtered:=false;
dm_1.aq_workshop3_chart.Filter:='time3='''+date3_1+'''';
dm_1.aq_workshop3_chart.Filtered :=true;
dm_1.aq_workshop3_chart.Open;
zhsunson 2003-08-22
  • 打赏
  • 举报
回复
with query1 do
begin
close;
sql.clear;
sql.add('select * from detail_rk where rkssj>=cast(:dd as datetime) and rkssj<cast(:dd as datetime)+1;
query1.parambyname('dd').asstring:=trim(edit1.text);
open;
end;
yuxiangyu 2003-08-22
  • 打赏
  • 举报
回复
不可能把?我一直使用dickeybird888(于伟刚) 的做法。我觉得这是最好的,屡试不爽!!
query1.sql.add('select * from detail_rk where rkssj=:Asj');
query1.prepared;
query1.ParamByName('Asj').asdatetime:=strtodatetime(edit1.text);
yousoft2013 2003-08-22
  • 打赏
  • 举报
回复
Rkssj是不是时间类型的,如果是,没理由错!
正常的时间应该有 多少分多少秒,你的库中有没有这些,还是small datetime?
在sqlserver的分析器中执行
Select * from Detail_rk where Rkssj='2003-8-21'
如果没数据,当然你的程序也就取不到数据了
SuperAA 2003-08-22
  • 打赏
  • 举报
回复
改为这样:
……
sql.add('Select * from Detail_rk where Rkssj='#'+edit1.text+'#'');

……

说明:
'dfasfas','2003-8-20'表示字符串
#2003-8-20#表示时间。
hmz998 2003-08-22
  • 打赏
  • 举报
回复
以上的都不对哦,哪个能具体点,帮帮我,真是头疼了
karach 2003-08-22
  • 打赏
  • 举报
回复
我认为是类型不同,你数据库里面是日期型的,Edit是string型的,用trtodatetime转换一下
dickeybird888 2003-08-22
  • 打赏
  • 举报
回复
query1.close;
query1.sql.clear;
query1.sql.add('select * from detail_rk where rkssj=:Asj');
query1.ParamByName('Asj').asdatetime:=strtodatetime(edit1.text);
query1.Open;
加载更多回复(2)

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧