日期:2014-05-20  浏览次数:20920 次

日期比较问题求教
要做日期比较查询,数据库日期yymmdd hhss格式,如131203 0510,用了DateTime.ParseExact方法报错,不知道还有什么好方法做啦,各位赐教,多谢
var obj = from fltdetail in db.cgs_fltdetail
               where DateTime.ParseExact(("20" + fltdetail.schdepdt.Trim()), str, format)  >= dateFrom &&
                       DateTime.ParseExact(("20" + fltdetail.schdepdt.Trim()), str, format)  <= dateTo 
                    
                          select new fltdetail
                          {
                              id = fltdetail.id,
                               fltnr = fltdetail.fltnr,
                              soflseqnr=fltdetail.soflseqnr,
                              schdepdt=fltdetail.schdepdt                             
                          };

------解决方案--------------------
"数据库日期yymmdd hhss格式"
数据库存放的日期只是数据,你捞取的时候才转换成某些特定格式显示.
目测,这个数据库表栏位设置的是char或者varchar ,然后弄这格式存放的,奇葩做法,浪费空间,也浪费每次都要转换的效能,
并且这样转换会死翘翘,资料失真了. 请问如何判断 131203 0510 一定是 2013/12/03 05:10 而不是 1913/12/03 05:10 ?  
只能加特殊逻辑限定, 首两位 < XX的 前面加 20XX, 否则 加 19XX?

数据库日期栏位设计成这样,请让设计者买块豆腐撞死... ...

"不知道还有什么好方法做啦"

没啥好方法,请截取字符串拼凑.. ..

------解决方案--------------------

            string input = "131203 0510";
            DateTime result = DateTime.ParseExact(input, "yyMMdd hhmm", null);

------解决方案--------------------
首先你要交待清楚你所谓的"LINQ" 是 LINQ2SQL 还是 LINQ2EF

   where DateTime.ParseExact(("20" + fltdetail.schdepdt.Trim()), str, format)  >= dateFrom

========
EF:
   where EntityFunctions.DiffMinutes(EntityFunctions.TruncateTime(fltdetail.schdepdt), dateFrom) < 0

LINQ2SQL中,可尝试  

SqlFunctions.DateDiff