如何在C#中对varchar数据类型应用日期时间比较

时间:2011-03-19 13:48:33

标签: c# sql-server linq-to-sql

我想对SQL Server数据库中varchar类型的字段应用日期时间比较。我想知道如何应用这个,例如我的查询是这样的

from Pos in TableName
where Pos.vcr_Value >= Convert.ToDateTime("UserInputDate") //UserInputDate = 02/02/2011
select Pos;

如果我尝试这个就行了

from Pos in TableName
    where Pos.vcr_Value == "UserInputDate" //UserInputDate = 02/02/2011
    select Pos;

但这只是匹配我想在UserInputDate变量

之后获取所有记录的日期

注意: 此字段存储可变类型的数据,有时它会在某个时间保存字符串日期时间

3 个答案:

答案 0 :(得分:2)

正如其他人所说,您的数据库设计基本上很差。鉴于该列甚至可能根本不是日期,您需要使用DateTime.TryParse或DateTime.TryParseExact来编写可在LINQ to Objects 中使用的内容。在LINQ to SQL中无法工作,因为您需要使用以块为主体的lambda表达式,并且无法将其转换为表达式树。

此外,您遇到了了解所期望的日期格式的问题 - 这是将日期存储在基于文本的字段中而不是作为基于日期的本机字段的自然必然结果

如果您的日期格式是yyyy-MM-dd(或yyyy / MM / dd),则可以通过进行字符串比较(例如,字符串比较)来执行至少近似正确查询的内容。例如,该值必须介于“2011-02-02”和“2099-12-31”之间。即便如此,它也会匹配诸如“201这不是真正的日期”之类的值。

如果你没有太多的记录,你总是可以在.NET端而不是在SQL中进行过滤 - 这不是理想的,但如果你使用破坏的模式,它可能是最可靠的选择。但是,如果可能,则应更改存储数据的方式。

答案 1 :(得分:1)

修复您的数据库。将varchar字段转换为DateTime

答案 2 :(得分:0)

检查here有答案如何转换和比较日期

HTH

Ivo Stoykov

PS:史蒂夫是对的。日期格式保存在DB中,因为varchar是非常糟糕的做法!