选择每天的具体时间范围

时间:2016-05-18 07:36:14

标签: c# sql sql-server entity-framework linq

我有一个股票市场数据库,其中商品的价格每隔5分钟存储一次。 表格低于列

  • ID
  • 商品
  • 时间

因为,证券交易所从

关闭
  • 格林尼治标准时间周五22:00至格林尼治标准时间22:00周日

因此,我需要从我的选择查询中排除这些结果。

有没有办法排除每个

的数据
  

格林尼治标准时间周五22:00至格林尼治标准时间22:00周日

在查询中。

因为,数据库大小非常大,所以我避免使用Cursor或Loops。我在应用程序中使用LINQ并试图找出一些棘手的SQL hack,并为它做一个Select查询。

4 个答案:

答案 0 :(得分:1)

根据数据库类型和"时间"根本不需要技巧。列数据(如果它实际上是数据时间,而不是仅限时间)

您可以使用SQl datepart命令选择特定的工作日和小时部分,因此您可以将其包含在WHERE子句中

为什么不使用LINQ解决方案 - 在

的情况下,创建视图可能对数据库性能有益
  • 正确确定索引

  • 如果数据库可以自动改进视图执行计划

  • 如果您正在使用物化视图(如果正确使用某些存储空间,则会极度提升)

答案 1 :(得分:1)

如果您在C#中使用LINQ,并假设您的Time属于DateTime struct类型且位于GMT(或UTC)时区,然后在DataTable集合项中,您可以使用Where子句过滤给定的限制:

var query = stocks
    .Where(x => x.Time.DayOfWeek != DayOfWeek.Saturday //not Saturday
    || !(x.Time.DayOfWeek != DayOfWeek.Friday && x.Time.Hour >= 22) //not Friday after 10PM
    || !(x.Time.DayOfWeek != DayOfWeek.Sunday && x.Time.Hour <= 22)); //not Sunday before 10PM

答案 2 :(得分:0)

我想是时间是DateTime(2)类型。你可以有一个标准,如:

sed 's/[^~]//g' inputfile.text| awk '{ print length }'

使用Linq To SQL(Linq To EF在日期时间有特殊的DbFunc):

HashMap<String, String> hashmap = new HashMap<String, String>();

for (Map.Entry<String, String> entry : hashmap.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
}

这将创建一个类似(但不相同)的SQL。

答案 3 :(得分:0)

以下是基于this postLinq query DateTime.Date.DayOfWeek线程的LINQ to Entities解决方案:

var query = from stock in db.Stocks
            let firstSunday = new DateTime(1753, 1, 7)
            let dayOfWeek = (DayOfWeek)(DbFunctions.DiffDays(firstSunday, stock.Time).Value % 7)
            let hour = stock.Time.Hour
            where !((dayOfWeek == DayOfWeek.Friday && hour >= 22) ||
                    (dayOfWeek == DayOfWeek.Saturday) ||
                    (dayOfWeek == DayOfWeek.Sunday && hour < 22))
            select stock;