您的位置:首页 > 数据库

固定datetimepicker控件的时间值及数据库按时间查询

2014-10-15 17:12 162 查看
目前还没找到通过设置控件属性达到目的的方法,故在程序中设置。

当用到datetimepicker的值时:

将datatime类型的值转换string类型来大袋目的

string ks = dtp1.Value.ToString("yyyy-MM-dd 00:00:00");
string js = dtp1.Value.ToString("yyyy-MM-dd 23:59:59");


关于数据库中按时间查询的一些问题

个别查询方法是不需要考虑时间问题的,如查询当天的内容,可用如下查询条件

datediff('d',kssj,now())=0

其中,d代表日,kssj是数据库中时间字段的列名,new()是现在的时间

附:

以下内容节选自:http://www.cnblogs.com/athrun/archive/2008/11/03/1325155.html

sql的between與查詢日期範圍

資料 Customer

IdNameRegisterDate
1澎澎2007/1/5 00:00:00
2丁丁2007/1/6 00:00:00
3亞亞2007/1/7 00:00:00
aspx頁面查詢條件:

最小日期: [2007-01-06]      最大日期: [2007-01-06]

使用的 sql:

SELECT ID, Name, RegisterDate

FROM Customer

WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007-01-06')

結果是傳回1筆:丁丁, 符合我的預期

但是 如果丁丁的RegisterDate 的時間 不是00:00:00呢?

如果資料是這樣

IdNameRegisterDate
1澎澎2007/1/5 00:00:00
2丁丁2007/1/6 04:37:00
3亞亞2007/1/7 00:00:00
一樣的sql

SELECT ID, Name, RegisterDate

FROM Customer

WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007-01-06')

傳回來的是0筆

 

嗯,因為我沒有給予正確的時間範圍嘛,我的查詢條件應該是2007/1/6 號整天時間範圍。

所以我通常程式在查詢前,都會先幫日期加1天

RegisterMaxDate = RegisterMaxDate.AddDays(1);

但是,這樣就對了嗎??

這樣的程式產生的sql是

SELECT ID, Name, RegisterDate

FROM Customer

WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007-01-07')

反而傳回2筆,把亞亞也傳回來了

因為 Sql 的 between min And max 是 value >=min && value <= max 的意思

所以我應該更精確的

RegisterMaxDate = RegisterMaxDate.AddDays(1).AddSeconds(-1);

那樣產生的sql 才會是

SELECT ID, Name, RegisterDate

FROM Customer

WHERE (RegisterDate BETWEEN '2007-01-06' AND '2007/1/6 23:59:59')

傳回1筆,也就是丁丁,我要的資料。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: