如何在HQL中使用DATEPART从DATETIME中获取YEAR
本文关键字:DATETIME 获取 YEAR DATEPART HQL | 更新日期: 2023-09-27 18:27:01
我是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";
我是以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";
编辑正如Diego非常正确地指出的那样,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";
year
函数已经在内部映射,因此:
SELECT DISTINCT year(p.Moment) as Year,
FROM Product_Source as p
这是由MsSql2000Dialect
(较新的MSSQL方言从中继承)注册的。
现在,假设Product_Source
是类的名称,这很奇怪,因为它不遵循通常的.NET约定(应该去掉下划线)