我继承了一个大型SQL Server数据库,该数据库具有某个表,该表具有某个日期列,该列是 yyyyMMdd 日期字符串格式的varchar(8)数据类型。为什么它不是datetime数据类型或类似的东西超出我。 (也许是为了节省空间?遗留数据库早就移植到SQL Server了?)
由于在日期想要的字段上过于慌乱,使用实体框架(DBContext w / LINQ)使用此列中的单个日期抓取行非常简单,如下所示:
var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date == myDateStr).ToList();
这就像它变得那么容易。但是,如果我想从此专栏中获取一系列日期,该怎么办?做这样的事情最好的方法是什么?
答案 0 :(得分:5)
yyyyMMdd格式的日期按字母顺序和数字顺序排列,因此您可以像使用任何其他字符串列一样使用范围选择器。
试试这个:
var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date >= myStrDateStr && x.Date <= myStpDateStr).ToList();
答案 1 :(得分:1)
如果日期采用您所说的格式(例如,20121025),那么它们将被视为已经正确排序,并且以下内容应该有效:
var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date >= startDate && x.Date <= endDate).ToList();
答案 2 :(得分:0)
将datetime的ParseExact方法与自定义格式一起使用。然后,您可以将其与表达式中的日期时间进行比较。