数据库中用于保存日期时间的字段,是否应该用 双精度型,就像Delphi一样。这样TDateTime直接可以赋值给该字段。最重要的是,可以大大提高查询效率。
比如要查找2006年3月到2007年5月之间的所有记录,如果用双精度型
条件就是 where (X > 38776.99999) and (X < 38869),
如果是 日期时间型,就不是这么简单了吧本人没做过数据库,如果说得不对,不要打击偶。
比如要查找2006年3月到2007年5月之间的所有记录,如果用双精度型
条件就是 where (X > 38776.99999) and (X < 38869),
如果是 日期时间型,就不是这么简单了吧本人没做过数据库,如果说得不对,不要打击偶。
解决方案 »
- 我想用Delphi写一个邮件收发组件的DLL,请教一些。
- fastreport无法直接打印,只有showreport后才能打印,何故?在线等回复
- 请问如何实现用户自组查询?
- 菜鸟的问题——密码问题!
- 超级200分,求intraweb6.0.17的注册码
- 哪里能找到intraweb各个控件的具体使用方法
- 哥们,帮帮忙!(如何获取密码)
- 怎么把整型变量转换成十六进制?急等至15:00
- 请各位帮忙:TClientSocket向TServerSocket连接,第一次不成功,再连一次...
- 谁有关于SQL Server70复制功能的详细资料? MRP2感兴趣吗?与我聊聊。
- DBGridEh.columns[i].Title.SortMarker:=smDownEh,会在第i列上有个向下的三角形,这是DBGrigEH中哪段代码实现的?
- 关于ClientDataSet.Locate()的问题
比如Ms Sql Server数据库,它和Delphi的起始日期规定的不一样,所以同一个双精度值,代表的不是同一天。所以我一般日期查询是用格式化后的日期字符串传进去,让它自己转化。
同意一楼所说的,得到方便的同时,也会有不方便的地方!~
打个比方:"where (X > 38776.99999) and (X < 38869), "这个WHERE语句是不是也需要转换?
DateTimePicker.DateTime:=0; ---->结果:1899-12-30 00:00:00.000select convert(float,convert(Datetime,'2007-01-30')) ---->结果:39110
BitBtn1.Caption:=FloatToStr(oweBeginDate.Date);
oweBeginDate.DateTime:=StrToDate('2007-01-30'); ---->结果:39112
但一楼说的不方便就来了:如何处理Sql语句内部的日期转换?
假设我做2007年一月份的月结,时间从20070101~20070131,如果按日期类型来处理,我只要传一个参数200701就可以了,现在就要传三个参数了,分别是200701,双精度数1(开始日期),双精度数2(结束日期)。
这样理解对否?
我跟你的思路是一样的,想法都是一样的就是你说的时候不应该说200701
比如要查找2006年3月到2007年5月之间的所有记录,如果用字符串
条件就是 where (X > "20060301000000") and (X < "20070531235959"),
一切以后台为准,而不是开发工具日期时间字段使用 datetime
日期字段使用 int
时间字段 float
月份字段 varchar
永远不要用字符串类型作为日期时间字段的类型记得在 Delphi 中转换 SQLServer 中的 int 表示的日期,具体就是 delphi.TDateTime + 2根本不用担心查询时 SQLServer 转换 字符串为日期时间 类型时的效率的问题,因为
SQLServer 会在优化之前就转换好,这个时间根本不会影响查询时的效率
而且如果只要时间的话,只能使用DateTime字段,然后格式化输出不显示日期部分,造成数据冗余
convert(varchar,convert(datetime,rFloat)),120)怎么转换都行啊。和delphi结合的只存在 +(-)2 的问题用 varchar 字符串来表示日期或者时间,愚蠢!