jooq - select删除强制转换的varchar长度信息

时间:2015-05-18 15:12:47

标签: sql sql-server casting varchar jooq

调用此代码时

DSLContext dslContext = DSL.using(SQLDialect.SQLSERVER);
dslContext.select(DSL.cast(field, SQLDataType.VARCHAR.length(255)));

select语句删除varchar长度的信息。 DSL.cast()方法返回cast("fieldName" as varchar(255)),select返回select cast("fieldName" as varchar)

问题在于,在SQLServer中,没有长度信息的强制转换会在30个字符之后剪切结果here。这非常令人讨厌,因为我的值超过30个字符。所以有人想知道如何获得一个看起来像select cast("fieldName" as varchar(255))的选择语句吗?

1 个答案:

答案 0 :(得分:0)

仅在jOOQ 3.0中引入了DataType上的长度,精度和比例信息,尽管在{0}}(issue #2708)之前CAST()表达式中未使用该信息:

最新版本的jOOQ正确呈现

cast([fieldName] as varchar(255))

所以,我建议升级到最新版本。

此外,如果您的版本/用量生成cast("fieldName" as varchar),我怀疑您可能也传递了错误的SQLDialect(而不是SQLSERVER)。使用SQLSERVER方言,标识符使用[brackets]生成,与使用"double quotes"标识符的其他方言不同...