0

我继承了一个大型 SQL Server 数据库,该数据库具有某个表,该表具有某个日期列,该列是yyyyMMdd日期字符串格式的 varchar(8) 数据类型。为什么它不是日期时间数据类型或类似的东西超出了我的范围。(也许是为了节省空间?旧版数据库很久以前就移植到了 SQL Server?)

无需对希望成为日期的字段过于慌张,使用实体框架(DBContext w/LINQ)从该列中使用单个日期获取行非常简单,如下所示:

var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date == myDateStr).ToList();

这很容易。但是,如果我想从该列中获取一系列日期怎么办?做这样的事情的最好方法是什么?

4

3 回答 3

5

yyyyMMdd 格式的日期按字母顺序和数字顺序正确排序,因此您可以像处理任何其他字符串列一样使用范围选择器。

试试这个:

var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date >= myStrDateStr && x.Date <= myStpDateStr).ToList();
于 2012-10-25T19:54:59.057 回答
1

如果日期是您所说的格式(例如,20121025),那么它们将被视为已正确排序,并且以下应该有效:

var rows = cxt.TableOfRandomDateColumn.Where(x => x.Date >= startDate && x.Date <= endDate).ToList();
于 2012-10-25T19:57:26.463 回答
0

将日期时间的 ParseExact 方法与您的自定义格式一起使用。然后您可以将其与表达式中的日期时间进行比较。

于 2012-10-25T20:01:53.103 回答