谁错了?微软、宝兰还是我

2468 2003-12-31 10:31:00
在D6中trunc(日期)可得到一个日期整数,在SQL Server中 Cast(日期类型字段 as integer )也可得到一个整型字段,但这两个值差2天,Why?
测试用例:
with adoquery1 do begin
cloas;
sql.text:='Select * from test where cast(rkrq as integer)='+inttostr(trunc(now));
open;
end;
其时间差两天。
环境:D6 Sql Server 7.0
请高手指教.
...全文
69 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
2468 2004-01-03
  • 打赏
  • 举报
回复
谢谢各位,不小心分给定少了,我找机会重开帖。
windindance 2004-01-02
  • 打赏
  • 举报
回复
当然是差两天。
1899-12-30
1899-12-31
1900-1-1
qufo 2004-01-01
  • 打赏
  • 举报
回复
日期本来就是这样的。
qufo 2004-01-01
  • 打赏
  • 举报
回复
本来一进来就想说楼主错了。

看完了真的觉得楼主错了。
2468 2004-01-01
  • 打赏
  • 举报
回复
to hatedeadlock(雪男孩(41289435)) :
您的方法可以得到当天的数据,要想得到任意一天或一段时间内的数据就不行了。

to comanche(太可怕):
即使如您所说也应该差一天,不应该差两天。

to hnhb(不死鸟) :
参数结果是一样的。


我所知是日期型实际用的是浮点数,其整数部分是从1900.1.1开始的天数,小数是一天内的时间,我感觉这两家公司中有一家的整数算错了,因为100多年中的闰年等因素,可能使某个公司算错,但好象这不是个复杂的东西,不应该出错的,所以甚为不解。

sql server 日期:2003-12-27 整数值: 37980
Delphi 6 日期:2003-12-27 整数值: 37982
hatedeadlock 2004-01-01
  • 打赏
  • 举报
回复
sql.text:='Select * from test where cast(rkrq as integer)=cast(getdate() as integer)'

这样不就行了吗
ljt98 2003-12-31
  • 打赏
  • 举报
回复
我觉得cast是数据库服务器日期,trunc是调试delphi程序客户端的日期
ljt98 2003-12-31
  • 打赏
  • 举报
回复
哦,原来如此。。。
comanche 2003-12-31
  • 打赏
  • 举报
回复
borland 是用 1899.12.30 作 0 这个是 IEEE 标准
ms 用的是 1900.1.1 作 0 这个好像是SQL早版中使用的标准
所以不同

ms sqlserver 可以用 Select * from test where rkrq = 'xxxx-xx-xx' 查询
不过, 这样的动态语句会产生内存碎片, 楼上不死鸟的方法, 用参数好点
hnhb 2003-12-31
  • 打赏
  • 举报
回复
用参数试试
2468 2003-12-31
  • 打赏
  • 举报
回复
to ljt98(真水无香) :
在实际使用中,我的句子是这样的:
sql.text:='Select * from test where cast(rkrq as integer)='+inttostr(trunc(datetimepicker1.date));
按datetimepicker1.date的日期在数据库中查找,与数据库中存放的日期差两天。
PowPro 2003-12-31
  • 打赏
  • 举报
回复
是啊,二家公司的东西嘛,可能个有个的标准,就像borland c++与VC++同样是C也有许多不同的地方
noproblem12 2003-12-31
  • 打赏
  • 举报
回复
borland 和ms的关于日期的定义不一样

2,497

社区成员

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

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