我有一个股票市场数据库,其中商品的价格每隔5分钟存储一次。 表格低于列
因为,证券交易所从
关闭因此,我需要从我的选择查询中排除这些结果。
有没有办法排除每个
的数据格林尼治标准时间周五22:00至格林尼治标准时间22:00周日
在查询中。
因为,数据库大小非常大,所以我避免使用Cursor或Loops。我在应用程序中使用LINQ并试图找出一些棘手的SQL hack,并为它做一个Select查询。
答案 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 post和Linq 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;