日期:2014-05-17  浏览次数:20766 次

关于时间日期的问题
要在数据库查一个时间段的数据,比如cDate>=XXX and cDate<=xxx

我在程序里是这样写的:

//查询上个月的数据
bgDate = dt.AddDays(1 - dt.Day).AddMonths(-1).ToString("yyyy-MM-dd:00:00:00");
edDate = dt.AddDays(1 - dt.Day).AddDays(-1).ToString("yyyy-MM-dd:23:59:59");
 
这样得出的数据是,bgDate =2013-01-01:00:00:00,edDate =2013-01-31:23:59:59

然后把这个两个值传给存储过程。然后存储过程拼出一个查询语句 cDate>=bgDate  and cDate<=edDate 


问题是,如果在数据库里,日期格式是yyyy/mm/dd那怎么办?难道我还要改程序?
然后针对不同的数据库,我都得把我的日期给改一下?

------解决方案--------------------
存储过程中先把字符串转换为日期格式,比如SqlServer 的 Convert 就可以带日期格式字符串,类似于“yyyy-MM-dd”;别用默认的转换,否则有问题,尤其是比如英文版和中文版日期是不同的。
------解决方案--------------------
传入参数,@data,然后datatime直接给参数复制,通过ado.net
------解决方案--------------------
存储过程里先格式化成你要求的。
然后再作为条件去取/
------解决方案--------------------
刚试了下,其实不用转也可以的,SQL SERVER已经帮你做了这部分的工作了,比如数据库的日期值是'2010-01-02',你用SQL=select * from tbtest where testdate='2010/01/02'一样可以查询出数据来
------解决方案--------------------
介个不用刻意去转换吧?sql认识'2013-01-01 00:00:00'这种格式
------解决方案--------------------
直接传入两个日期更好些吧,然后把你的查询条件改为下面这样:
cDate between bgDate  and edDate 
注:between后面的格式可能不对,记不清了,你可以查一下。