日期比较问题求教

fuxuejingf 2013-12-10 10:33:03
要做日期比较查询,数据库日期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
};
...全文
264 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸭梨山大帝 2013-12-13
  • 打赏
  • 举报
回复
不用86年... 除非任何资料都是两千年的.(WHO 敢保证?) 至少我们公司有2000年以前的资料,所以还得引入特殊逻辑判断. 就如我一楼所说,为了一个设计缺陷,引入一堆的特殊逻辑,防呆,处理. 得不偿失.
引用 11 楼 q107770540 的回复:
这个炸弹至少还有86年才会爆炸
q107770540 2013-12-11
  • 打赏
  • 举报
回复
这个炸弹至少还有86年才会爆炸
鸭梨山大帝 2013-12-11
  • 打赏
  • 举报
回复
你的问题没解决,只是处理掉一个炸弹,又埋了一堆地雷而已... ... ("20" + fltdetail.schdepdt.Trim()), str, format)
引用 9 楼 fuxuejingf 的回复:
问题解决,谢谢各位
fuxuejingf 2013-12-11
  • 打赏
  • 举报
回复
问题解决,谢谢各位
宝_爸 2013-12-10
  • 打赏
  • 举报
回复
引用 5 楼 fuxuejingf 的回复:
[quote=引用 3 楼 findcaiyzh 的回复:]

            string input = "131203 0510";
            DateTime result = DateTime.ParseExact(input, "yyMMdd hhmm", null);
DateTime.ParseExact使用不是问题,问题是不能用在linq里[/quote] 这个比较麻烦,因为EF没法把DateTime.ParseExact翻译成sql语句。 解决方法就是 1. 修改数据库成DateTime类型,这样可以在linq中使用<, >等运算符。 2. 将数据全部取到内存中,再使用ParseExact可以了。

//So first select your data

var data= (from item in entities.itemsSet).ToList();


//Then filter
var filtered = from item in data
           where Convert.ToDateTime(shift.starttime) >= startDate 
               && Convert.ToDateTime(shift.endtime) < endDate
           select item;
以上代码来自: http://stackoverflow.com/questions/2555927/linq-to-entities-datetime-conversion
fuxuejingf 2013-12-10
  • 打赏
  • 举报
回复
引用 4 楼 Lost_Painting 的回复:
"要先查询到数据,再循环数据拼凑字符串,还是怎么地啊,想在linq里直接处理了会比较方便" 皆可,你熟悉什么,方便什么就用什么 用T-SQL来split然后join也行,用linq来split然后join起来也行 反正我说的特殊逻辑,你在哪里join字符串都要考虑进去. 再次强调,其实浪费你这么多时间来处理这一个时间栏位的根本原因是 设计缺陷
不明白具体实现
fuxuejingf 2013-12-10
  • 打赏
  • 举报
回复
引用 3 楼 findcaiyzh 的回复:

            string input = "131203 0510";
            DateTime result = DateTime.ParseExact(input, "yyMMdd hhmm", null);
DateTime.ParseExact使用不是问题,问题是不能用在linq里
鸭梨山大帝 2013-12-10
  • 打赏
  • 举报
回复
"要先查询到数据,再循环数据拼凑字符串,还是怎么地啊,想在linq里直接处理了会比较方便" 皆可,你熟悉什么,方便什么就用什么 用T-SQL来split然后join也行,用linq来split然后join起来也行 反正我说的特殊逻辑,你在哪里join字符串都要考虑进去. 再次强调,其实浪费你这么多时间来处理这一个时间栏位的根本原因是 设计缺陷
宝_爸 2013-12-10
  • 打赏
  • 举报
回复

            string input = "131203 0510";
            DateTime result = DateTime.ParseExact(input, "yyMMdd hhmm", null);
fuxuejingf 2013-12-10
  • 打赏
  • 举报
回复
艾玛,好犀利的评论,数据库我管不了,只能将就做啦,小系统,数据近几年的,跨度没那么大,字符串拼凑我知道,但一点想不明白,要先查询到数据,再循环数据拼凑字符串,还是怎么地啊,想在linq里直接处理了会比较方便
鸭梨山大帝 2013-12-10
  • 打赏
  • 举报
回复
"数据库日期yymmdd hhss格式" 数据库存放的日期只是数据,你捞取的时候才转换成某些特定格式显示. 目测,这个数据库表栏位设置的是char或者varchar ,然后弄这格式存放的,奇葩做法,浪费空间,也浪费每次都要转换的效能, 并且这样转换会死翘翘,资料失真了. 请问如何判断 131203 0510 一定是 2013/12/03 05:10 而不是 1913/12/03 05:10 ? 只能加特殊逻辑限定, 首两位 < XX的 前面加 20XX, 否则 加 19XX? 数据库日期栏位设计成这样,请让设计者买块豆腐撞死... ... "不知道还有什么好方法做啦" 没啥好方法,请截取字符串拼凑.. ..
q107770540 2013-12-10
  • 打赏
  • 举报
回复
首先你要交待清楚你所谓的"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

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧