我是StackOverflow的新用户,我需要HQL字符串中的帮助..
在SQL中,我的查询是这样的......
SELECT DISTINCT DATEPART(yyyy, Moment) AS Year,
FROM PRODUCT_SOURCE
如何将其转换为HQL?
我试过这个,但没有用..
query = "SELECT DISTINCT DATEPART(year, p.Moment) as Year, " +
"FROM Product_Source as p";
答案 0 :(得分:6)
<击> 我基于SQL2008方言,所以根据你的需要进行更改。 击>
<击>public class MsSql2008ExtendedDialect : MsSql2008Dialect
{
public MsSql2008ExtendedDialect()
{
RegisterFunction("DATEPART_YEAR",
new SQLFunctionTemplate(NHibernateUtil.DateTime, "datepart(year, ?1)"));
}
}
使用你会像你一样使用你的HQL
query = "SELECT DISTINCT DATEPART_YEAR(p.Moment) as Year, " +
"FROM Product_Source as p";
击> <击> 撞击>
编辑正如迭戈所指出的那样,MSSQL服务器中的大多数功能都已经注册。有关完整列表,请参阅https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Dialect/MsSql2000Dialect.cs
所以只需使用: -
query = "SELECT DISTINCT year(p.Moment) as Year, " +
"FROM Product_Source as p";
答案 1 :(得分:1)
year
函数已在内部映射,因此:
SELECT DISTINCT year(p.Moment) as Year,
FROM Product_Source as p
这是由MsSql2000Dialect
注册的(新的MSSQL方言继承)。
现在,假设Product_Source
是您的类的名称,这是奇怪的,因为它不遵循通常的.NET约定(您应该删除下划线)