我在MySQL中有一个表,它的字符串列“id”的形式是“xnnnn”,其中nnnn是一个数字。
我想找到定义的最大nnnn。所以我有:
var c = s.CreateCriteria(typeof(Item))
.AddOrder(Order.Desc(
Projections.Cast(
NHibernateUtil.Int32,
Projections.SqlFunction("substring", NHibernateUtil.String,
Projections.Property("Id"),
Projections.Constant(2), Projections.Constant(10)))
))
.SetProjection(Projections.Property("Id"))
.SetMaxResults(1)
.List<string>();
但是nhibernate生成SQL:
SELECT this_.Id as y0_ FROM `Item` this_
ORDER BY cast(substring(this_.Id, ?p0, ?p1) as INTEGER) desc limit ?p2
MySQL不喜欢…它坚持:
cast(substring(this_.Id, ?p0, ?p1) as SIGNED INTEGER)
我在演员表中尝试过各种类型,但没有一种能产生正确的输出。我需要做的所有其他与地图工作都很好。
有什么建议吗?