如何在HQL中使用DATEPART从DATETIME获取YEAR

1 c# sql nhibernate hql

我是StackOverflow的新用户,我需要一个HQL字符串的帮助..

在SQL中我的查询是这样的..

SELECT DISTINCT DATEPART(yyyy, Moment) AS Year,
FROM PRODUCT_SOURCE
Run Code Online (Sandbox Code Playgroud)

如何将其转换为HQL?

我试过这个,但没有用..

query = "SELECT DISTINCT DATEPART(year, p.Moment) as Year, " + 
        "FROM Product_Source as p";
Run Code Online (Sandbox Code Playgroud)

Rip*_*ppo 6

我基于SQL2008方言,所以根据你的需要进行更改.

public class MsSql2008ExtendedDialect : MsSql2008Dialect
{
  public MsSql2008ExtendedDialect()
  {
    RegisterFunction("DATEPART_YEAR", 
      new SQLFunctionTemplate(NHibernateUtil.DateTime, "datepart(year, ?1)"));
  }
} 
Run Code Online (Sandbox Code Playgroud)

要使用你会像这样使用你的HQL

query = "SELECT DISTINCT DATEPART_YEAR(p.Moment) as Year, " + 
        "FROM Product_Source as p";
Run Code Online (Sandbox Code Playgroud)

编辑 As 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";
Run Code Online (Sandbox Code Playgroud)

  • 无需手动注册; `年`已经存在了. (2认同)