Sqlite 如何选择传入日期是否介于日期范围之间

Sqlite 如何选择传入日期是否介于日期范围之间,sqlite,windows-phone-8,winrt-xaml,Sqlite,Windows Phone 8,Winrt Xaml,我有一个包含日期时间字段的表,如下所示: class ItemSales { [PrimaryKey, AutoIncrement] public int SpId { get; set; } public string CompanyName { get; set; } public string ItemNo { get; set; } public DateTime StartDate {

我有一个包含日期时间字段的表,如下所示:

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 } 类别项目销售 { [主密钥,自动增量] 公共int SpId{get;set;} 公共字符串CompanyName{get;set;} 公共字符串ItemNo{get;set;} 公共日期时间起始日期{get;set;} 公共十进制单价{get;set;} 公共十进制最小数量{get;set;} 公共日期时间结束日期{get;set;} 公共十进制成本{get;set;} 公共日期时间插入日期{get;set;} ----其他 } ---
其他

问题是:

如何查询需要检查传入字符串date 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"); 私有异步void GetActualPrice(字符串Cpy、字符串No、字符串strCurrentDate、字符串strSelectedOM) { var db=新的SQLiteAsyncConnection(dbPath); var Items=await db.Table()。其中(x=>x.CompanyName==Cpy&&x.ItemNo==No&&strCurrentDate>x.StarDate&&strCurrentDate“当前日期”是指向数据库提交查询的时间吗?可以在查询中将当前日期格式化为常量,如: 此外,您还需要通过以下方式为查询响应提供数据类型:

List Items=wait db.querySync(…

var Items=await db.querysync(…

然后

日期为2013/12/23。我假设数据库中的日期为格林尼治标准时间

(编辑:将string.format()更改为字符串连接…)
(编辑:根据提供的错误消息,C#需要被告知.QueryAsync()返回的数据类型。SQL查询语法可能也有问题,但在数据类型声明修复之前,我们无法找到它。)

Sqlite仅在日期为yyyy-MM-dd HH:MM:ss格式时比较日期。因此,在Sqlite db中插入日期时间时,请将yyyy-MM-dd格式作为字符串类型插入以下查询

var Items = await db.QueryAsync("Select * From ItemSales Where CompanyName ='" + Cpy + "'" + " AND ItemNo ='" + No + "'" +
" AND " + "'" + strCurrentDate + "'" + " BETWEEN StartDate And EndDate");
另一种方法是只需使用linq查询来比较日期

var Items = await db.Table<ItemSales>().Where(x=>x.CompanyName ==cpy && x.ItemNo ==No && x.strCurrentDate >StartDate && x.strCurrentDate <EndDate).ToList();

var Items=await db.Table()。其中(x=>x.CompanyName==cpy&&x.ItemNo==No&&x.strCurrentDate>StartDate&&x.strCurrentDate这不是一个重复的问题。不同的是我以字符串形式传递日期,我需要对照表中的dateTime字段进行检查。您是否阅读了建议的重复问题中的答案?日期没有重复o在sqlite中被专门格式化为日期,因为它们在DB中存储为字符串。我阅读了它。在我的情况下,yyyy mm dd格式的传入字符串日期用于对照日期时间字段检查,而对照字符串日期格式的日期时间字段检查。我正在测试它,不确定这是否可行?当前日期为柯:“2013-12-23”如何对照表中的dateTime字段进行检查。您是否可以在不使用string.Format的情况下以正常方式写入?奇怪的是,在select语句中使用的上述格式中,即使表中存在StartDate和EndDate错误。如何处理select语句中的开始日期和结束日期。具体错误是什么r您看到的消息?查看表的架构定义(至少是StartDate和EndDate列)也很有用,以确保它们定义为SQL datetime。我已经编辑了上面的响应以删除string.Format().Ah-您需要为QueryAsync返回的值声明一个C#数据类型,因为您没有为项声明它。编辑回答againOK,我知道我需要添加db.QueryAsync。我有个问题,我需要将开始和结束日期转换为字符串吗?错误消息:运算符“>”不能应用于“string”和“System.DateTim”类型的操作数是的,LinQ中存在问题。日期作为日期数据类型插入表中(不使用字符串)。@MilkBottle Convert StartDate和EndDate as dateTime现在我的字符串日期是:strurDate=“12/23/2013”,我使用Convert.ToDateTime(strurDate)。表中的日期是否作为日期存储?错误消息:nosuch function ToDateTime.var Items=wait db.table()其中(x=>x.CompanyName==Cpy&&x.ItemNo==No&&Convert.ToDateTime(strCurrentDate)>x.StartingDate&&Convert.ToDateTime(strCurrentDate)var Items = await db.Table<ItemSales>().Where(x=>x.CompanyName ==cpy && x.ItemNo ==No && x.strCurrentDate >StartDate && x.strCurrentDate <EndDate).ToList();