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

来源:互联网 发布:linux故障排查 编辑:程序博客网 时间:2024/06/05 13:26

目前还没找到通过设置控件属性达到目的的方法,故在程序中设置。

当用到datetimepicker的值时:

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

[csharp] view plaincopy
  1. string ks = dtp1.Value.ToString("yyyy-MM-dd 00:00:00");  
  2. 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

IdNameRegisterDate1澎澎2007/1/5 00:00:002丁丁2007/1/6 00:00:003亞亞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呢?

如果資料是這樣

IdNameRegisterDate1澎澎2007/1/5 00:00:002丁丁2007/1/6 04:37:003亞亞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筆,也就是丁丁,我要的資料。

0 0
原创粉丝点击