数据库中用于保存日期时间的字段,是否应该用 双精度型,就像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 连接MySQL数据库问题
- 如何声明一个数组型的变量啊?
- 请问:怎么控制DBGrid中的光标不到某一列中,就按Tab键,当到这一列时,跳过这一列,到下一列呢?
- 我有SUIPack3.9的源代码,有人要与我联系
- 一个错误...
- 如何使DBGird显示当前的数据库内容,数据库已在后台更新了?
- AnimateWindow的問題
- 如何实现在TreeView与DBGrid之间通过鼠标拖动实现数据交换
- 如何用delphi直接启动一个Word文档?不需打开文件对话框。送80分
- 一个特别容易的难题!值得一看!!!
- 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 字符串来表示日期或者时间,愚蠢!