我正在开发一个用C#编写的ASP.NET应用程序,它使用NHibernate和SQL Server 2005/2008。
我目前有一些日期从数据库中以与当前用户的CultureInfo / DateTimeFormatInfo匹配的格式显示。现在,我需要支持一个快速搜索,它将根据与部分匹配的搜索项匹配数据库行。
因此,如果我显示“01/02/2009 03:00:00”并输入“01/02”,我需要匹配该行(在与部分模式匹配的任何其他行中)。同样适用于“02/20”,“02/2009”等。它基本上只是我在UI中显示的部分字符串匹配,但过滤需要在数据库层发生,当我是检索行。
我目前的计划是创建一个查询(通过ICriteria),在将其转换为nvarchar之后在DateTime列上执行WHERE,然后对该转换执行LIKE。所以类似“WHERE CONVERT(nvarchar(19),COLUMN,120)LIKE'%?%'”。但是,您可能已经看到了问题,因为CONVERT将“120”作为其日期格式而不是“MM / DD / YYYY”(我可以从当前的DateTimeFormatInfo获取)。不幸的是,CONVERT的结果需要与我在这个方法的UI中显示的结果一致。
我可以将模式作为DateTimeFormatInfo中的字符串获取,但SQL Server在转换时似乎不支持标准字符串日期模式。有没有办法让C#中的DateTimeFormatInfo与SQL Server中的CONVERT一起使用?也许甚至有一些NHibernate工具来做这种事情(这会很好,因为它不会像直接查询那样把我绑在SQL Server上)?或者也许还有一些其他的选择,我烧毁了大脑?
感谢您的时间和帮助!