我有这个Hibernate查询。
select e from Article e where (e.PublishDate <= '04/02/2014')
查询没有产生任何行,因为当前系统格式正确的查询是(月初):
select e from Article e where (e.PublishDate <= '02/04/2014')
如何比较日期,以便可以独立比较(不依赖于系统日期格式)
答案 0 :(得分:0)
我的建议是你使用ISO格式的日期。通常,ISO格式在其他格式不起作用时有效。如果你没有分离器,ISO是YYYY-MM-DD或者只是YYYYMMDD。某些数据库允许您使用YYYY / MM / DD但是当使用MSSQL作为我的后备存储时,我使用带有破折号的ISO格式。另一种适用于SQL服务器的格式是YYYY-MMM-DD,它转换为今天的2014-APR-02。您可以在线找到每月3个字母的ISO值,如果您使用.NET,则可以使用:
string.format("{0:YYYY-MMM-DD}",dateValue)
这将允许您使用内部vb.net datetime对象,并在需要时将它们格式化为select语句所需的值。
我发现无论将系统日期格式设置为数据库引擎本身,都可以与ISO标准值进行比较。虽然我不知道nHibernate具体发生了什么,但这个技巧对我使用的每一个其他O / R映射器都有用,所以它也适用于此。