0

我需要创建一个 HQL where 子句,其形式为:

where tbl1.DateTimeField + tbl2.TimeSpanField >= :someDateTimeParameter

DateTimeField 的类型为 DateTime

TimeSpanField 是 BigInt 类型(这是最好的选择吗?)

someDateTimeParameter 是 DateTime

如上所述编写 HQL 查询几乎可以完全转换为 TSQL,但这显然是无效的。

  1. 我需要做什么才能让这个 where 子句起作用?我可以使用一些 HQL 技巧吗?
  2. 如果没有,我如何编写 HQL 以使用一些 TSQL 函数为我做比较?
  3. 我需要什么 TSQL?

谢谢!

安德鲁

4

2 回答 2

1

对于 1 和 2,请参阅在 HQL 中执行日期/时间数学?寻求答案。对于 3 使用 dateadd 或 datediff(谷歌为 t-sql + 函数名)

于 2009-06-24T11:11:10.073 回答
0

我最终将时间跨度存储为从 1900 年 1 月 1 日偏移的日期时间,就像这样

protected readonly DateTime leadTimeAdjustment = new DateTime(1900, 1, 1);

[Obsolete("For use by NHibernate only.")]
public virtual DateTime _leadTime { get; protected set; }

public virtual TimeSpan LeadTime
{
    get { return _leadTime - leadTimeAdjustment; }
    set { _leadTime = leadTimeAdjustment.Add(value); }
}
于 2009-06-24T12:58:48.967 回答