DateTime 列を検索できるように、SQL Server 2008 の Convert 関数を利用したいと考えています。
提案された SQL は次のようになります。
SELECT (list of fields) FROM aTable
WHERE CONVERT(VARCHAR(25), theColumn) LIKE '%2009%'
convert の呼び出しをエミュレートしようとする条件の一部を次に示します。
Projections.SqlFunction("CONVERT",
NHibernateUtil.String,
Projections.Constant("varchar(25)"),
Projections.Property(searchCol))
検索列は動的に選択されるため、クエリでハードコーディングすることはできません。
問題は、SQL が nhibernate によって生成されるとき、データ型を文字列として渡すときに、その周りに引用符があってはならないことです。
したがって、生成された sql は次のようになります。
(convert(@p3, this_.theColumn) LIKE @p4
必要な場合:
(convert(varchar(25), this_.theColumn) LIKE @p4
私は間違いなく問題があると確信してProjections.Constant("varchar(25)")
いますが、それを機能させるための正しい射影構文がわかりません。