我有一个包含DateTime字段的表格如下:
class ItemSales { [PrimaryKey, AutoIncrement] public int SpId { get; set; } public string CompanyName { get; set; } public string ItemNo { get; set; } public DateTime StartDate { get; set; } public decimal UnitPrice { get; set; } public decimal MinimumQuantity { get; set; } public DateTime EndDate { get; set; } public decimal Cost { get; set; } public DateTime InsertDate { get; set; } ---- others }
---
其他
问题:
如何查询我需要检查传入字符串日期strCurrentDate(DateTime.Now)是否在表中的StartDate和EndDate之间?
如果我将当前日期作为yyyy-mm-dd传递,并且我具有以下功能:
---更新
错误消息:
运营商'>'不能应用于'string'和'System.DateTime'
类型的操作数private async void GetActualPrice(string Cpy, string No, string strCurrentDate,string strSelectedUoM) { var db = new SQLiteAsyncConnection(dbPath); var Items = await db.Table < ItemSales >().Where(x => x.CompanyName == Cpy && x.ItemNo == No && strCurrentDate > x.StarDate && strCurrentDate < x.EndDate).ToListAsync(); foreach (var _line in Items) { } } No need to convert the Start and End Date into string ??? "'" + strCurrentDate + "'" + " BETWEEN StartDate And EndDate");
答案 0 :(得分:0)
按“当前日期”,是指将查询提交到数据库的时间?您可以将当前日期格式化为查询中的常量,例如: 此外,您需要通过以下方式为查询响应提供数据类型:
List<String> Items = await db.QueryAsync( ...
或
var Items = await db.QueryAsync<List<String>>( ...
然后
"Select * From ItemSales Where CompanyName ='" + Cpy + "' AND ItemNo ='" + No + "' AND '" + DateTime.UtcNow.ToString("yyyy/M/d") + "' BETWEEN StartDate and EndDate");
日期将形成2013/12/23。我假设您的数据库中的日期是GMT。
(编辑:将string.format()更改为字符串连接...) (编辑:根据提供的错误消息,需要告诉C#.QueryAsync()返回的数据类型.SQL查询语法可能也有问题,但在数据类型声明修复之前我们不会找到它。)
答案 1 :(得分:0)
Sqlite仅比较日期为yyyy-MM-dd HH:mm:ss格式的日期。因此,当您在sqlite db中插入datetime时,请以yyyy-MM-dd格式插入以作为后续查询的字符串类型。
var Items = await db.QueryAsync("Select * From ItemSales Where CompanyName ='" + Cpy + "'" + " AND ItemNo ='" + No + "'" +
" AND " + "'" + strCurrentDate + "'" + " BETWEEN StartDate And EndDate");
另一种方法是你只需使用linq查询来比较日期。这是linq查询
var Items = await db.Table<ItemSales>().Where(x=>x.CompanyName ==cpy && x.ItemNo ==No && x.strCurrentDate >StartDate && x.strCurrentDate <EndDate).ToList();