独立地比较HQL中的日期

时间:2014-04-02 07:39:53

标签: sql sql-server vb.net fluent-nhibernate hql

我有这个Hibernate查询。

select  e  from Article e where (e.PublishDate <= '04/02/2014')

查询没有产生任何行,因为当前系统格式正确的查询是(月初):

select  e  from Article e where (e.PublishDate <= '02/04/2014')

如何比较日期,以便可以独立比较(不依赖于系统日期格式)

1 个答案:

答案 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映射器都有用,所以它也适用于此。