请问如何查询数据库某一时间段内的数据?

时间:2021-05-31 11:13:38
各位高手,我在数据库中有一个字段是date,我如何查询数据库中某一时间段内的数据?
下面的语句错在哪里?
.Filter = "data>='" & DTPicker2.Value & "' and data<='" & DTPicker3.Value & "'"

29 个解决方案

#1


用between么。

#2


"select 字段 from 表名 where filter between #" & cstr(cdate(dtpticker2.value)) & "# and #" and cstr(cdate(dtpicker3.value)) & "#"

#3


嘻嘻!
'将时间转化成SQLServer认可的形式
Public Function ConvertTimeToSQLServerSQL(ByVal OriginalTime As Date) As String
    
    ConvertTimeToSQLServerSQL = "'" & Format(OriginalTime, "yyyy-mm-dd hh:nn:ss") & "'"
    
End Function

#4


各位高手,我在数据库中有一个字段是date,我如何查询数据库中某一时间段内的数据?
下面的语句错在哪里?
.Filter = "data>='" & DTPicker2.Value & "' and data<='" & DTPicker3.Value & "'"
--->data应为date,如下:
.Filter = "date>='" & DTPicker2.Value & "' and date<='" & DTPicker3.Value & "'"

#5


to asussony(我用2000b我怕谁?) :between如何用呢?
to w18ily(看.net没几天) 我试了还是不行
to netcar(netload) 不是这个问题,data是我定义的字段

#6


Set Myrs2 = Mydb.OpenRecordset("select sum(数量) as numSum ,sum(金额) as numPrice  from inlibsearch where 材料编码='" + mrc.Fields("goodsid") + "' and 进库日期 >=#" & DTPicker1.Value & "# and 进库日期 <= #" & DTPicker2.Value & "# ")
这是我以前写的软件所用到的语句,你看看是否可参考。

#7


先说什么数据库,赫赫。

#8


"select 字段 from 表名 where data between '"& ConvertTimeToSQLServerSQL(dtpticker2.value) &"' and '" & ConvertTimeToSQLServerSQL(dtpicker3.value) & "'"

#9


zhenxizhou(追忆)的写法结合Between更好!
 是直接利用SQL的关于时间的写法,我的是自己的用法,嘻嘻!

#10


用Datediff函数,对两个时间做差。

具体参看T-SQL说明。

#11


to sinopec_fjnp(小不点)
我试了,说类型不符

#12


用datadiff函数

#13


to newly_ignorant(不学无术)
access 有问题吗?

#14


在vb下用str(val(DTPicker2.Value ))试一试
是between .... and .....

#15


我觉得要看你用的是什么数据库,如果是ACCESS好象直接用#号把时间括起来就行了,如果用的是SQL SERVER 则要用:
            strtimerang = "WHERE (进库日期>= CONVERT(DATETIME, '" & Format(DTPicker1.Value, "yyyy-MM-dd") & " 00:00:00', 102)) AND " _
                        & "(进库日期<= CONVERT(DATETIME, '" & Format(DTPicker2.Value, "yyyy-MM-dd") & " 23:59:59', 102)) "

#16


UP

#17


Access的日期型常量是用#號括起來的。所以你的Recordset.Filter條件應這樣設:

.Filter = "data>=#" & DTPicker2.Value & "# and data<=#" & DTPicker3.Value & "#"

#18


如果是SQL SERVER 的话,可以在SQL语句中使用DATEDIFF函数,具体用法请参照联机帮助.

#19


直接用SQL不就得了?你这样搞得太复杂
SQLCode:
select ..... from ..... where (valuedate(date)>起始日期) and (valuedate(date)<截止日期)

#20


跟你操作的数据库类型有关

#21


刚才的SQL有错误,应该是:

"select ..... from ..... where (Cast(Date AS DateTime)>(Cast('" + Cstr(DTPickerStart.Value) + "' AS DateTime)>) And (Cast(Date AS DateTime)<(Cast( '" +Cstr(DTPickerEnd.Value)+ "' AS DateTime)>)"

从DTPicker中取时间然后转换成字符型量嵌到SQL里就完了:)

#22


刚才的SQL有错误,应该是:

"select ..... from ..... where (Cast(Date AS DateTime)>(Cast('" + Cstr(DTPickerStart.Value) + "' AS DateTime)) And (Cast(Date AS DateTime)<(Cast( '" +Cstr(DTPickerEnd.Value)+ "' AS DateTime))"

从DTPicker中取时间然后转换成字符型量嵌到SQL里就完了:)

#23


我也遇到过这种问题,你不要使用dtpicker控件的value属性,你将这些值分开,比如dtpicker.year &"-" &dtpicker.month &"-"& dtpicker.day.这样就没有问题了。

#24


补充说明,这样解决吧
Select .... from ....
Where DATEDIFF(dd,开始日前,Date)<0 and DATEDIFF(dd,结束日前,Date)>0

#25


oracle中

字段名 between to_date() and to_data()

#26


我在Sql Server 2000的联机帮助中看到《编写国际化 Transact-SQL 语句》这篇文章,觉得很有用,其中提到数据库中的日期时间问题。下面是我在delphi中的尝试:
先写一个函数:
function CreateGlobalTSQLString(ADateTime: TDateTime): string;
var
  strDestDateTime: string;
begin
  strDestDateTime := FormatDateTime('yyyy-mm-dd hh:mm:ss.zzz', ADateTime);
  Result := 'CONVERT(DATETIME,''' + strDestDateTime + ''',20)';
end;

然后在生成sql语句时这样写:
ADODataSet1.CommandText := 'SELECT * FROM 订单 WHERE 订购日期 BETWEEN '+
  CreateGlobalTSQLString(DateTimePicker1.Date) + ' AND ' +
  CreateGlobalTSQLString(DateTimePicker2.Date) + ' ORDER BY 订购日期';

这样就不用考虑DateTimePicker的日期格式和库中日期字段的格式的不同了。实际上这样处理就是告诉sql server我给你传进去的日期是什么格式的,剩下的事就是sql server的事了。

我只在sql server 2000上测试通过。有兴趣的朋友可以试试其它的数据库。

#27


select  datevalue(进库日期)>'"dtpicker1.value"' from 表

#28


需要改变以下时间格式:samlldatetime(DateTimePicker)

#29


between和datediff 应该都可以吧

#1


用between么。

#2


"select 字段 from 表名 where filter between #" & cstr(cdate(dtpticker2.value)) & "# and #" and cstr(cdate(dtpicker3.value)) & "#"

#3


嘻嘻!
'将时间转化成SQLServer认可的形式
Public Function ConvertTimeToSQLServerSQL(ByVal OriginalTime As Date) As String
    
    ConvertTimeToSQLServerSQL = "'" & Format(OriginalTime, "yyyy-mm-dd hh:nn:ss") & "'"
    
End Function

#4


各位高手,我在数据库中有一个字段是date,我如何查询数据库中某一时间段内的数据?
下面的语句错在哪里?
.Filter = "data>='" & DTPicker2.Value & "' and data<='" & DTPicker3.Value & "'"
--->data应为date,如下:
.Filter = "date>='" & DTPicker2.Value & "' and date<='" & DTPicker3.Value & "'"

#5


to asussony(我用2000b我怕谁?) :between如何用呢?
to w18ily(看.net没几天) 我试了还是不行
to netcar(netload) 不是这个问题,data是我定义的字段

#6


Set Myrs2 = Mydb.OpenRecordset("select sum(数量) as numSum ,sum(金额) as numPrice  from inlibsearch where 材料编码='" + mrc.Fields("goodsid") + "' and 进库日期 >=#" & DTPicker1.Value & "# and 进库日期 <= #" & DTPicker2.Value & "# ")
这是我以前写的软件所用到的语句,你看看是否可参考。

#7


先说什么数据库,赫赫。

#8


"select 字段 from 表名 where data between '"& ConvertTimeToSQLServerSQL(dtpticker2.value) &"' and '" & ConvertTimeToSQLServerSQL(dtpicker3.value) & "'"

#9


zhenxizhou(追忆)的写法结合Between更好!
 是直接利用SQL的关于时间的写法,我的是自己的用法,嘻嘻!

#10


用Datediff函数,对两个时间做差。

具体参看T-SQL说明。

#11


to sinopec_fjnp(小不点)
我试了,说类型不符

#12


用datadiff函数

#13


to newly_ignorant(不学无术)
access 有问题吗?

#14


在vb下用str(val(DTPicker2.Value ))试一试
是between .... and .....

#15


我觉得要看你用的是什么数据库,如果是ACCESS好象直接用#号把时间括起来就行了,如果用的是SQL SERVER 则要用:
            strtimerang = "WHERE (进库日期>= CONVERT(DATETIME, '" & Format(DTPicker1.Value, "yyyy-MM-dd") & " 00:00:00', 102)) AND " _
                        & "(进库日期<= CONVERT(DATETIME, '" & Format(DTPicker2.Value, "yyyy-MM-dd") & " 23:59:59', 102)) "

#16


UP

#17


Access的日期型常量是用#號括起來的。所以你的Recordset.Filter條件應這樣設:

.Filter = "data>=#" & DTPicker2.Value & "# and data<=#" & DTPicker3.Value & "#"

#18


如果是SQL SERVER 的话,可以在SQL语句中使用DATEDIFF函数,具体用法请参照联机帮助.

#19


直接用SQL不就得了?你这样搞得太复杂
SQLCode:
select ..... from ..... where (valuedate(date)>起始日期) and (valuedate(date)<截止日期)

#20


跟你操作的数据库类型有关

#21


刚才的SQL有错误,应该是:

"select ..... from ..... where (Cast(Date AS DateTime)>(Cast('" + Cstr(DTPickerStart.Value) + "' AS DateTime)>) And (Cast(Date AS DateTime)<(Cast( '" +Cstr(DTPickerEnd.Value)+ "' AS DateTime)>)"

从DTPicker中取时间然后转换成字符型量嵌到SQL里就完了:)

#22


刚才的SQL有错误,应该是:

"select ..... from ..... where (Cast(Date AS DateTime)>(Cast('" + Cstr(DTPickerStart.Value) + "' AS DateTime)) And (Cast(Date AS DateTime)<(Cast( '" +Cstr(DTPickerEnd.Value)+ "' AS DateTime))"

从DTPicker中取时间然后转换成字符型量嵌到SQL里就完了:)

#23


我也遇到过这种问题,你不要使用dtpicker控件的value属性,你将这些值分开,比如dtpicker.year &"-" &dtpicker.month &"-"& dtpicker.day.这样就没有问题了。

#24


补充说明,这样解决吧
Select .... from ....
Where DATEDIFF(dd,开始日前,Date)<0 and DATEDIFF(dd,结束日前,Date)>0

#25


oracle中

字段名 between to_date() and to_data()

#26


我在Sql Server 2000的联机帮助中看到《编写国际化 Transact-SQL 语句》这篇文章,觉得很有用,其中提到数据库中的日期时间问题。下面是我在delphi中的尝试:
先写一个函数:
function CreateGlobalTSQLString(ADateTime: TDateTime): string;
var
  strDestDateTime: string;
begin
  strDestDateTime := FormatDateTime('yyyy-mm-dd hh:mm:ss.zzz', ADateTime);
  Result := 'CONVERT(DATETIME,''' + strDestDateTime + ''',20)';
end;

然后在生成sql语句时这样写:
ADODataSet1.CommandText := 'SELECT * FROM 订单 WHERE 订购日期 BETWEEN '+
  CreateGlobalTSQLString(DateTimePicker1.Date) + ' AND ' +
  CreateGlobalTSQLString(DateTimePicker2.Date) + ' ORDER BY 订购日期';

这样就不用考虑DateTimePicker的日期格式和库中日期字段的格式的不同了。实际上这样处理就是告诉sql server我给你传进去的日期是什么格式的,剩下的事就是sql server的事了。

我只在sql server 2000上测试通过。有兴趣的朋友可以试试其它的数据库。

#27


select  datevalue(进库日期)>'"dtpicker1.value"' from 表

#28


需要改变以下时间格式:samlldatetime(DateTimePicker)

#29


between和datediff 应该都可以吧