Sql 如何将字符串数据与时间进行比较
我的数据类型为字符串,时间类似于Sql 如何将字符串数据与时间进行比较,sql,linq,Sql,Linq,我的数据类型为字符串,时间类似于06:00A,09:00P,等等。我想查询从6am到12pm的数据,如何将字符串数据转换为时间格式并在linq to sql中查询它?使用DateTime.ParseExact或DateTime.TryParseExact将字符串转换为日期。如果不能保证时间的字符串版本总是正确的,请坚持使用TryParseExact版本 将其转换为日期后,按常规进行查询 例如: 回复后编辑: 如果您使用的是针对EntityFramework编写的代码,那么不,这将不起作用。(还请
06:00A
,09:00P
,等等。我想查询从6am
到12pm
的数据,如何将字符串数据转换为时间格式并在linq to sql中查询它?使用DateTime.ParseExact
或DateTime.TryParseExact
将字符串转换为日期。如果不能保证时间的字符串版本总是正确的,请坚持使用TryParseExact
版本
将其转换为日期后,按常规进行查询
例如:
回复后编辑:
如果您使用的是针对EntityFramework编写的代码,那么不,这将不起作用。(还请注意,Linq To SQL和Entity Framework之间有很大的区别,但在某种程度上也适用相同的概念)
支持LINQ的ORM实际上是将where子句转换成一个语法,然后由ORM转换成SQL。您将得到一个NotSupported异常或类似的情况
问题中的表格使用该时间格式有什么原因吗?为什么不在表中使用日期时间?还可以选择在sql server中使用时间数据类型(假设您的目标是sql server),该数据类型映射到.net中的时间跨度类型
您可以在Sql server中定义表,如下所示:
create table log ( data varchar(20), logtime time )
LINQ表达式看起来像:
from x in Logs
where x.Logtime >= new TimeSpan(6,0,0) && x.Logtime <= new TimeSpan(12,0,0)
select x
日志中x的
其中x.Logtime>=new TimeSpan(6,0,0)和&x.Logtime使用DateTime.ParseExact
或DateTime.TryParseExact
将字符串转换为日期。如果不能保证时间的字符串版本总是正确的,请坚持使用TryParseExact
版本
将其转换为日期后,按常规进行查询
例如:
回复后编辑:
如果您使用的是针对EntityFramework编写的代码,那么不,这将不起作用。(还请注意,Linq To SQL和Entity Framework之间有很大的区别,但在某种程度上也适用相同的概念)
支持LINQ的ORM实际上是将where子句转换成一个语法,然后由ORM转换成SQL。您将得到一个NotSupported异常或类似的情况
问题中的表格使用该时间格式有什么原因吗?为什么不在表中使用日期时间?还可以选择在sql server中使用时间数据类型(假设您的目标是sql server),该数据类型映射到.net中的时间跨度类型
您可以在Sql server中定义表,如下所示:
create table log ( data varchar(20), logtime time )
LINQ表达式看起来像:
from x in Logs
where x.Logtime >= new TimeSpan(6,0,0) && x.Logtime <= new TimeSpan(12,0,0)
select x
日志中x的
其中x.Logtime>=newtimespan(6,0,0)和&x.Logtime我建议编写自己的解析器,并将时间表示为TimeSpan
:
TimeSpan? ToTimeSpan(string str)
{
// get A or P at the end
var amPm = str.Last();
int hrs, mins;
try
{
hrs = int.Parse(str.Substring(0, 2));
mins = int.Parse(str.Substring(3, 2));
}
catch
{
return null;
}
switch (amPm)
{
case 'P': hrs += 12; break;
case 'A': break;
default: return null;
}
return new TimeSpan(hrs, mins, 0);
}
我建议编写自己的解析器,并将时间表示为TimeSpan
:
TimeSpan? ToTimeSpan(string str)
{
// get A or P at the end
var amPm = str.Last();
int hrs, mins;
try
{
hrs = int.Parse(str.Substring(0, 2));
mins = int.Parse(str.Substring(3, 2));
}
catch
{
return null;
}
switch (amPm)
{
case 'P': hrs += 12; break;
case 'A': break;
default: return null;
}
return new TimeSpan(hrs, mins, 0);
}
谢谢你的回复。我试图将时间与24小时军事时间进行比较,但它返回了所有记录。where语句是这样的:(a=>(ParseTime(a.MEETING\u START\u TIME).HasValue&&ParseTime(a.MEETING\u START\u TIME).Value.Hour>=6)和(ParseTime(a.MEETING\u END\u TIME).HasValue&&ParseTime(a.MEETING\u END\u TIME).Value.Hour我想问题是我正在使用Linq到entityframework和ParseTime()方法在where子句中未被调用。是否应在模型类中添加ParseTime()方法?感谢您的响应。我尝试将时间与24小时军事时间进行比较,但它返回所有记录。where语句如下:(a=>(ParseTime(a.MEETING\u START\u time)。HasValue&&ParseTime(a.MEETING\u START\u time)。Value.Hour>=6)&&&(ParseTime(a.MEETING_END_TIME).HasValue&&ParseTime(a.MEETING_END_TIME).Value.Hour我想问题是我正在使用Linq to entityframework,并且在where子句中没有调用ParseTime()方法。我应该在模型类中添加ParseTime()方法吗?