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

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

当用到datetimepicker的值时:

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

[csharp] view plain copy
  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

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筆,也就是丁丁,我要的資料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值